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

4-1/시스템프로그래밍 10

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..

Standard I/O, Unix I/O vs Standard I/O vs RIO

Standard I/O Streams Standard I/O model은 file을 stream 개념으로 open한다. Buffered I/O : Motivation Application은 한 번에 한 문자만을 read/write하는 경우가 있는데 이는 많은 system call을 불러오기 때문에 비효율적이다. Standard I/O는 Buffer만큼 read,write을 하기 때문에 system call이 적게 발생한다. printf가 발생할 때마다 disk에 접근하는 것이 아니라 '\n'를 읽거나 exit, return from main이 발생할 때만 disk에 접근하게 된다. Unix I/O vs Standard I/O vs RIO Standard I/O와 RIO는 low-level Unix I/O..

Metadata, sharing and redirection

File Metadate Metadata는 data에 대한 data이다. stat 그리고 fstat 함수를 이용하여 접근할 수 있다. How the Unix Kernel Represents Open Files Descriptor table, Open file table, v-node table 모두 kernel 영역에 있다. v-node table에는 file의 meta data가 있고 이 정보를 통해 Disk에 있는 file정보를 불러올 수 있다. File Sharing 두 개의 descriptor가 같은 file에 access하게 되면 아래와 같은 구조로 접근하게 된다. 같은 file에 접근하더라도 descriptor들은 다른 open file table entry를 가지고 있고 다른 open fil..

Unix I/O, RIO package

Unix I/O Overview 모든 I/O device는 file로 표현 된다. (ex /dev/sda2, /dec/tty2) 심지어 커널까지도... Hardware device를 file에 mapping 시키는 것은 Unix I/O라는 간단한 interface를 kernel이 이용할 수 있게 한다. open() - I/O device에 접근한다. close() - I/O device에 접근을 종료한다. read() - 파일에서 n byte를 읽어 메모리에 가져온다. write() - 메모리에 n byte를 파일에 저장한다. lseek() - 현재 file position을 바꾼다. File Types 각각의 file들은 역할을 나타내는 type을 가지고 있다. Regular file Directory..

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에서..

Process Control

System Call Error Handling 당연히 System Call을 할 때 Error가 발생할 수 있기 때문에 Error 처리를 해줘야 한다. ※System call에서 Exception만이 void return 값을 갖는다. Creating and Terminating Processes Process state는 4가지가 있다. Running - 현재 CPU에 의하여 실행되고 있는 상태이다. Waiting - Scheduling이 된 상태로 대기 중인 상태이다. Blocked (Stopped) - Scheduling이 되지 않은 상태로 Signal이 와야 Scheduling이 된다. Signal이 오지 않는다면 Scheuling이 될 수 없다. Terminated - 다시는 실행되지 않을 상..

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..