일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 코테
- 컴공과
- Stack
- 정석학술정보관
- 너비우선탐색
- 스택
- Computer science
- 브루트포스
- vector
- c++
- 컴퓨터공학과
- 코딩
- OS
- 정석
- 그래프
- coding
- DP
- Operating System
- 개발
- 알고리즘
- 문제풀이
- 컴공
- 구현
- 오에스
- bfs
- 북리뷰
- 오퍼레이팅시스템
- 자료구조
- cs
- 백준
- Today
- Total
목록Univ/System Programming (18)
Little Jay

어느덧 마지막 파트에 다다랐다. Sys Level I/O를 다루기만 하면 시스템프로그래밍이라는 과목을 한번 다 돌아보게 되는 것이다. 이제는 UNIX I/O가 어떻게 작동하는지 알아보자. UNIX I/O Overview 파일은 Byte의 Sequence이다. 앞서서 배열, 구조체 등을 배울 때에도 잠깐 언급을 했었지만, 파일은 결국 Byte가 선형 배열로 놓여있는 것이다. 이를 Linear Array of Bytes라고 한다. 또한 모든 I/O Device는 파일로 편현이 된다. 예를 들어서 /dev/tty 라고 하면 터미널에 접근할 수 있게 된다. 그리고 각각의 파일은 시스템 내에서 수행하는 타입이 있다. Regular File : 임의의 데이터를 담고 있다. Directory:파일과 관련된 그룹의 I..

Wait 앞서서 Parent Process는 Child Process를 "Reap" 한다고 언급했다. 이는 Parent Process에서 wait 혹은 waitpid 함수 호출을 통해서 진행이된다. int wait (int *status); 위에 있는 것이 wait 함수의 원형인데, 말 그대로 자식 Process의 종료 상태를 얻어내는 것을 목표로한다. 다시말해 Child Process가 끝날때까지 current process를 progress시키지 않고 suspend한다. 이 함수의 return 값은 끝나기를 기대하는 Child Process의 PID 번호이다. 그것이 가리키는 정수는 자식 프로세스가 종료된 이유와 종료 상태를 나타내는 값으로 설정이 된다. 이를 알아보기 위해서는 wait.h 파일에 들..

Termination Process는 세 가지 이유로 종료가 된다. 먼저 main 함수의 routine에 의해 자발적으로 종료가 되는 경우, exit함수로 자발적인 종료를 호출하는 경우, 마지막으로 종료를 수행하는 signal을 받을때이다. 다들 알고있겠지만 exit함수에 대한 간단한 소개를 하고 넘어가자면, exit함수는 말그대로 process를 terminate시킨다. 이 함수에는 번호가 들어가는데, 그 범위는 0~255까지 들어갈 수 있으며 0은 정상종료의 의미, 0이 아닌 경우에는 error상황이다. C의 stdlib.h 헤더파일에는 void atexit(void *(func) (void)); 가 들어가있다. 자세한 설명은 아래 링크의 블로그를 참조하면 되겠다. 이 함수는 exit할 때 다른 함수..

Creating New Process 새로운 Process를 만드는 데에는 여러가지 방법들이 있다. Directly하게 Process를 생성하는 경우가 있지만, Cloning과 Replacing 기법을 사용해서 새로운 Control Flow를 지니는 Process를 생성한다. Clonging하는 것은 말 그대로 복제본을 하나 생성하는 것이다. 이때 생성된 Process를 Child Process라고 부르는데, 이 Process는 Parent Process, 즉 자신을 만든 Parent Process와 PID(Process ID)만 빼고 나머지가 같다. 이러한 Child Process를 만드는 것은 fork() system call을 통해 가능하다. 이를 Process Spawning이라고도 하며, Cal..

Process 프로세스에 대한 정의는 다양하다. OS를 다루는 부분에서도 설명을 또 할것이지만, 여기서도 정의를 해보겠다. Process는 프로그램이 실행 준비가 되어 메모리에 올라가있는 상태이다. 이를 반대로 말하자면 Program은 아직 Code의 형태로 Disk에 존재하는 것이다. 조금더 상세히 명세를 하자면, Program의 Code와 Data가 Memory에 저장된 상태이다. 이때 OS는 PCB라는 Data Structure을 활용해서 Process를 나타낸다. Process는 각 Program에게 두 가지 Key Abstraction을 제공한다. 이는 Independent Logical Control Flow, Private Address Space인데, Independent Logical C..

User Mode vs Kernel Mode 프로세서는 기본적으로 mode bit를 제공해서 CPU가 어느 영역에서 task를 수행하는지 결정한다. CPU에는 크게 두 가지 Mode로 구분할 수 있는데 이는 Kernel Mode와 User Mode로 구분한다. Kernel Mode: 커널 모드는 Supervisor Mode이다. mode bit가 set 되면 Kernel Mode에서 Instruction을 수행한다. Supervisor Mode이기 때문에 Kernel Mode는 모든 privileges를 갖는다. HW에 접근 즉 I/O Device와의 통신 등 아무런 제약 없이 Execute 한다 User Mode: 유저 모드는 mode bit이 set 되지 않은 상태이다. 우리가 일반적으로 End-Us..

Source File 소스파일, 혹은 소스 프로그램이라고도 하는데 이는 본질적으로 text파일이다. main.c 라는 파일이 있다고 하자. 이 파일은 byte의 sequence를 담고 있는 파일이다. 각각의 바이트는 character에 해당하는 interger value값을 가지고 있다. ASCII(American Standartd Code for Information Interchange)은 text character을 나타내기 위한 규약으로서 대부분의 현대 컴퓨터 시스템들은 이를 따르고 있다. ASCII Table은 byte sized interger value를 unique하게 나타낸다. 아래는 Standard ASCII code의 Table이다. Linux환경에서 터미널에 gcc -o hello ..

Linking Linking이란 다양한 코드와 데이터를 메모리에 로드(복사)하여 실행할 수 있는 단일 파일로 수집 및 결합하는 프로세스이다. Linking 실행 시간에 따라 두 가지 방식으로 나뉘게 되는데, 첫 번째는 Static Linking이다. 이는 Compile Time에 수행이 되는데, relocatable object files들과 command line arguments를 취한 다음 Linked된 Executable Object를 생성하게 된다. 다음으로는 Dynamic Linking이다. 이 방식은 load time이나 run time에 수행될 수 있으며 Shared Library가 여러개의 Process에 의해 공유될 수 있다. Application은 이 Shared Library를 Li..

컴퓨터의 모든 코드는 어떠한 '흐름'으로 동작한다. 순차적이든, 병렬적이든 코드들은 정해진 Procedure에 의해 동작을 하게 되는데, 이번에는 Procedure Call이 어떻게 동작하는지 알아보자. C도 그렇고 대부분의 프로그래밍 언어는 함수로 동작을 한다. C/C++같은 경우는 main에서 함수가 동작을 하는데 우리는 프로그래밍을 하면서 수많은 함수들을 짜게 된다. 이때 Procedure에서 함수를 부르는 친구를 caller라고 하고, 호출되는 함수를 callee라고 한다. Process를 실행시키기 위해 Program은 메모리에 올라가게 되고 Running State에 들어가게 되면 CPU는 적절하게 명령을 수행하며 다양한 Procedure Call이 불린다. Calling을 할때는 ISA마다 ..

Status Register CPU에는 Status Register, PSW라는 아주 작은 레지스터를 지니고 있다. 이는 CPU의 current status를 저장하기 위한 레지스터이다. CPU는 이 레지스터를 통해 코드의 flow를 Control하게 된다. Status Register는 인텔 x86 아키텍쳐에서는 Condition Code를 저장한다고 한다. Condition Code는 Single Bit으로서 이를 통해 flag를 저장한다. 이 Flags들은 operation의 결과에 따라 set된다. 일반적으로 많이 알려진 Condition Code에는 CF Carry Flag ZF Zero Flag SF Sign Flag OF Overflow Flag 등이 존재한다. 앞선 포스팅에 나와있는 레지스..