출처: https://3months.tistory.com/307 [Deep Play]

시스템프로그래밍 6

Concurrent Programming

Iterative Server Iterative Server는 하나의 process만을 사용하는 Server이다. Iterative Server에서 client의 connection이 먼저 생성되면 그 connection이 종료될 때까지 다른 client에게 service를 제공하지 못한다. 따라서 client가 server를 무한정 기다리게 되는 상황이 발생한다. Connect 함수는 connection이 생성되지 않았더라도 server의 listenfd에 queuing되면 리턴 값을 반환하기 때문에 client는 read를 하면서 block된다. Process-based Server Process-based Server는 여러 개의 process를 사용한다. Client와의 connection이 생길..

Network Programming

A Client-Server Transaction 대부분의 network application은 client-server model을 기반으로 한다. Client-server model이란? 한 개의 server process와 한 개 또는 여러 개의 client process로 이루어져 있다. Server는 resource를 관리한다. Server는 resource를 이용하여 client에게 service를 제공한다. Server는 client의 요청에 의해서 활성화된다. ※ Client와 server는 host에서 실행된다.(host는 같을 수도, 다를 수도 있다. Computer Networks network는 계층적 시스템으로 지리적 근접성에 기반하여 구분한다. SAN (System Area Ne..

Signal

Signal Signal은 Process가 받는 message이다. Process는 kernel, 다른 process 그리고 자기 자신에게서 Signal을 받을 수 있다. Signal Concepts : Sending a Signal Kernel은 Signal을 destination process로 context switch 할 때 전달해 준다. Kernel이 signal을 보내는 이유 Kernel이 divide-by-zero(SIGFPE) 또는 termination of a child process(SIGCHLD)를 해야 할 때 Process가 다른 process를 kill 하고 싶을 때 Signal Concept : Receiving a Signal Process가 Signal을 받았을 때 하는 행동..

Shell

Shell Programs Shell이란 사용자로부터 받은 명령을 실행시키는 application이다. Kernel과 사용자 사이의 다리역할을 한다고 보면 된다. Shell Program의 종류에는 sh, csh/tcsh, bash가 있다. 우리 학교의 리눅스 서버에서는 bash를 이용하고 있다. Shell program은 while문을 돌면서 항상 명령어를 받을 준비를 하고 있다. (오른쪽은 코드) ls-al(명령어)를 치면 eval함수가 실행된다. eval함수는 명령어가 실행가능하다면 fork를 띄우고 execve함수를 사용하여 명령어를 실행한다. background이냐 foreground이냐에 따라 이후에 처리가 달라지는데,,, 이해를 못했다 ㅋㅋ Foreground process : Shell에서..

Processes

Processes Process는 program이 메모리에 올라가 CPU가 접근 할 수 있는 상태를 의미한다. Program이라고 하면 안되고 Processor이라고도 하면 안된다. (Processor는 CPU이다.) Process는 두 가지 추상적인 개념을 program에 부여한다. Logical control flow 각각의 프로그램이 CPU를 독점적으로 사용는 것으로 착각한다. OS가 context switch를 해주기 때문에 가능하다. Private address space 각각의 프로그램이 메인 메모리를 독점적으로 사용하는 것으로 착각한다. OS가 virtual memory를 제공해주기 때문에 가능하다. Logical control flow와 Private address space 때문에 CPU..

Exceptional Control Flow, Exception

Control Flow Processor는 한 번에 한 가지 일만 처리할 수 있다. 실행되었을 때부터 종료될 때까지 CPU는 그저 instruction들을 순서대로 읽을 뿐인데 이 순서를 Control Flow라고 한다. 항상 instruction을 순서대로 읽으면 좋겠지만 당연하게도 정해진 순서를 바꿔야 하는 경우가 발생하게 된다. Program state에서 Jumps, branches, call, return 등을 사용하여 프로그래머가 의도적으로 이 control flow를 바꿀 수 있다. 하지만 data가 disk나 network adapter에서 오는 경우, divides by zero가 발생하는 경우, 사용자가 Ctrl-C를 누르는 경우, System에 할당된 시간이 다 된 경우 등 Syste..