본 포스팅을 기점으로 '시스템 프로그래밍' 전반에 대한 개념 공부 과정을 Velog에 기록하고자 한다. 역시나 다른 시리즈와 마찬가지로, 본인의 복습이 포스팅의 가장 큰 목적이다. 본 포스팅의 내용은 Randal E. Bryant와 David R. O'Hallaro
동기식과 비동기식 예외를 구분하는 가장 좋은 비유는 아래와 같다.동기식 예외는, 햄버거를 주문했을 때 카운터에서 가만히 기다리는 것이고, 비동기식 예외는 햄버거를 주문해놓고 다른 일을 하면서 기다리는 것!
1.1, 1.2 포스팅을 통해 우리는 프로세스의 정의를 아래와 같이 확인한 바 있다.Process : Instance of a Running ProgramProcess : 프로그램이 메모리에 '명령어의 시퀀스'로 적재된 후, CPU를 동작시킬 수 있는 상태가 되었을
1.3 포스팅에서 이야기한 프로세스 컨트롤에 대해 더 자세히 다루어보자. 지난 포스팅에서 공부한 프로세스 그래프는 다음과 같은 목적을 가진다.Process Graph의 목적 : Concurrent Program의 Statements들의 Partial Orderin
Process Hierarchy Linux에서 '프로세스 계층도(Process Hierarchy)'는 다음과 같은 형태를 띈다. ~> Linux 시스템에서 pstree라는 명령을 통해 이 Process Hierarchy 트리 구조를 선형적인 형태로 확인할
Nested Signal Handlers 시그널 핸들러는 여러 가지가 중첩될 수 있다. 프로세스에는 Signal A, B에 대한 Signal Handler가 Install되어 있다. 프로세스가 Context Switch 이후 다시 돌아올 때, Kerne
컴퓨터공학에서 I/O(Input & Output)은 다음과 같이 정의할 수 있다.I/O : Main Memory와 External Device 사이의 소통Input은 External에서 Main Memory로, Output은 Main Memory에서 External
UNIX Kernel에서 Open File들을 어떻게 나타내는지 아래 그림을 통해 이해해보자.~> File Descriptor 1이 Terminal File을 가리키고 있고, File Descriptor 4가 Disk File을 가리키고 있다.프로세스가 있으면, 프
본 포스팅은 System Programming을 다루고 있는데, 왜 갑자기 '네트워크'인가? System Programming에서 가장 주요한 부분 중 하나가 'Concurrent Program', 'Concurrency'이다. 이들을 더 깊이 있게 이해하기 위해선
지난 시간까지 Application, 즉, Host 입장에서의 internet Networking 매커니즘을 알아보았다. 본 연재는, 지난 시간에도 언급한 것처럼, 네트워크가 주된 포인트가 아니다. 우리가 지금 네트워크 개념을 잠시 다루는 이유는, 곧 학습할 'Co
본격적으로 Socket Interface를 사용해 네트워크 프로그래밍을 하는 방법에 대해 알아보겠다. 우리는 Socket Interface의 이해를 위해, Echo Server를 예시로 들 것이다. Linux Shell에서 echo 명령을 사용해본 경험이 있을 것이
Introduction Concurrent Programming이란, 앞서 Process와 Signal 개념에서 다룬 Concurrent Flow를 떠올리면 되는데, 여러 프로그램과 Flow가 동시적으로 수행되는 상황을 다루는 프로그래밍을 의미한다. &n
Process-based Concurrent Server > Process-based : 각 Client와의 Connection을 위해 '분리된 프로세스'를 생성한다. Process-based Concurrent Server는 fork가 핵심이다. Client1이
현재 우리는 Concurrent Server를 구축하는 3가지 방법론에 대해 논하고 있다. 지난 포스팅에서 우린 Process-based와 Event-based의 디테일과 차이점에 대해 알아보았다. 오늘은 마지막 방법론인 Thread-based Server에 대해
Chapter4까지 Concurrent Server에 대해 다루었다. 간단히 요약하면 다음과 같다.Process-based : Client로부터 Server에게 Connection Request가 전송될 때마다, Server는 이를 받고, fork를 띄워 Conne
지난 시간 우리는 Thread Programming 시의 Synchronization에 대해 다루었다. cnt라는 전역변수를 두 개의 Thread에서 각각 Increment하는 프로그램을 예시로 들었다. 만약, 프로그램의 입력 값이 10000이라면, 20000이라는
지난 포스팅에서 Semaphore에 대해 알아보았다. Semaphore란, 0 이상의 값을 가지고, P와 V라는 연산에 의해 조작되는 전역 변수라고 했다. 이때, 초기 Mutex 값이 1이면 Binary Semaphore, 1보다 큰 값이면 Counting
이제부터 우리는 'Thread-Safety' 개념에 대해 알아볼 것이다. 이전에 다루었던 'Async-Signal-Safety'와 유사하게 바라보면 된다.Thread-Safe : 여러 Thread가 Concurrent하게 특정 함수를 반복적으로 호출할 때, 항상 C
Thread Part의 마지막 포스팅이다. 먼 길을 달려왔다. 이제 Thread가 무엇인지 꽤나 윤곽이 잡힐 것이다. 추후 업로드할 Thread-based Server 제작 포스팅을 통해 Thread에 대한 이해를 최종 완성하도록 하자. 우선, 이번 포스팅에선, T
지금까지 우리는 Critical Section에 대한 Mutual Exclusion을 제공해 Synchronization 문제를 해결했었다. 그 과정에서, 프로그램이 돌아가는 기반 컴퓨터가 단일 CPU인지, Multicore인지는 고려하지 않았었다. 허나, 알다시
지금부터는 '동적 메모리 할당(Dynamic Memory Allocation)'에 대해 다룰 것이다. C의 malloc을 떠올리면 된다. 동적 할당은 'Heap Memory Manager'가 수행한다. 힙 메모리 관리자를 다르게 부르면 'Dynamic Memory
지난 시간 우리는 Dynamic Memory Allocation의 기초 이론을 가볍게 다루어보았다. Heap은 결국 Word 단위 Memory Addressing이 이루어지는 '연속된' 가상 메모리 공간인 것이다. Heap의 시작 주소부터, brk Pointer가
현재 우리는 Process에서 Heap Segment를 어떻게 할당하고 관리하는지 알아보고 있다. Heap은 Top of Heap, 즉, brk Pointer가 가리키는 위치에 따라 크기가 좌우된다. brk Pointer는 sbrk 호출을 통해 조절되며, sbrk
지금까지 열심히 Implicit Free List에 대해 다루었다. 이제부턴 아직 소개하지 않은 Method들인 Explicit Free List와 Segregated Free List에 대해 알아보자.(추후 업데이트)
이번 포스팅에선 Implicit Memory Management에 대해 다뤄보겠다. 6.1 포스팅에서 우리는 Implicit Memory Allocator에 대해 아주 간단히 언급한 바 있다. Application이 Allocate만 하고, Free는 하지 않는 D
우리가 C Program을 작성하고, Program을 메모리에 올릴 때, Process에는 Code 및 Data가 자리잡는다(단순히 Segment를 말하는 것이 아니다). 이때
우리는 현재 Linking에 대해 학습하고 있다. 우리가 Modular Programming을 할 때, 각 Subprogram별로 Program을 쪼개는 것이다. 한 소스 코드에 다 집어넣지 않는 것이다. 이때, 분리된 소스 코드들을 하나의 실행 파일로 묶는 것이
Interposition은 '중간에 끼워넣음'이라는 의미로, Intercept와 유사한 뉘앙스라고 생각하면 된다. Library Interpositioning : 임의의 Function에 대한 호출을 프로그래머가 Intercept할 수 있는 Linking Techn
대망의 System Programming 연재 마지막 포스팅이다. 마지막 개념은 그동안 계속 언급만 해왔던 Virtual Memory이다. 이는 Computer Architecture를 공부했다면 어느정도 이미 알고 있을 수 있는 내용이지만, SP 연재가 끝나면 새