
I/O redirection이란 file, command, program, script의 출력 결과를 다른 file, ...의 입력으로 전달하는 것을 말한다.
shell이 fork()하고 exec("wc", "wc w3.c")를 수행한다.
→ exec(...)하기 전, shell이 STDOUT(1)을 닫고 open("newfile.txt")한다.
File Descriptor & File Descriptor Table
File Descriptor는 파일, 디렉토리, 또는 기기를 나타내는 정수값이다.
각 프로세스는 File Descriptor Table을 가지고 있는데, STDIN(0), STDOUT(1), STDERR(2)는 기본으로 열려 있다.

각 System Call 정리:
open(): 새로운 file descriptor를 할당할 때, 앞에서부터 비어 있는 것 찾는다. (이를 이용 redirection)close(): 'fd'에 해당하는 dile deallocate.fork(): 부모 프로세스에서 자식 프로세스로 file descriptor table을 그대로 넘겨준다. (Parent에서 open하고 fork하면 Child에서도 똑같이 access 가능)exec(): 기존에 가지고 있던 file descriptor table이exec()에 그대로 넘어간다.
Pipe
한 프로세스에서 다른 프로세스로 한 방향의 (Unidirectional) byte stream
- 크기나, 수신/발신자 정보 없이 쭉 흘러간다.
- File descriptor로 접근 가능한, kernel buffer이다.
- Pipe에 대한 접근은 fd에 읽기/쓰기하는 것과 같다.


두 가지 종류의 Pipe가 있다.
1. Anonymous Pipe
이름이 없다 → 누군가가 그 이름으로 open 불가 (Unidirectional)
→ Parent-Child 관계에서만 쓴다.int pipe(int filedes[2]);


2. Named Pipe
bi-directional, no parent-child relationship.
파일 시스템에 의해 관리되며, 여러 writer 가능. (이름 있고 파일처럼 read, write 가능)
→ (process가 unlink를 하지 않으면) communicating process가 끝난 뒤에도 살아 있다.
int mkfifo(const char* path, mode_t mode);int unlink(const char* path);
- 만약 FIFO를
O_RDONLY또는O_WRONLY쌍으로 열 경우,O_NONBLOCK이 설정되어 있으면O_RDONLY의open()은 딜레이 없이 수행될 것이다. /O_RDONLY의open()은 현재 읽고 있는 프로세스가 없으면 error를 반환할 것이다.O_NONBLOCK이 설정되어 있지 않으면,O_RDONLY와O_WRONLY의open()이 thread가 읽거나 쓰기 위한 파일을 열 때까지 block할 것이다. (같이 open하지 않는 한 밑으로 내려가지 않는다.)
Inter-Process Communication (IPC)
서로 다른 프로세스들은 다른 주소 공간을 가지므로, 그들 간의 통신 method가 있어야 한다.
→ 주로 message passing / shared memory로 가능하다.
- 전통적인 UNIX IPC: signal, pipe, socket
- System V IPC: message queue, semaphore, shared memory
Producer

Consumer

→ 차후 3. Memory에서 다시 다룰 예정.
'Computer Science > OS' 카테고리의 다른 글
| 2-5. Virtualization: Multi-Level Feedback Queue (0) | 2024.11.05 |
|---|---|
| 2-4. Virtualization: Scheduler(FIFO, SJF, STCF, RR)와 성능 지표 (5) | 2024.11.05 |
| 2-3. Virtualization: Limited Direct Execution (1) | 2024.11.04 |
| 2-1. Virtualization: 프로세스 관리와 자료구조, Process API (0) | 2024.11.03 |
| 1. 운영체제 개요 (6) | 2024.11.01 |