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)와 성능 지표 (1) | 2024.11.05 |
2-3. Virtualization: Limited Direct Execution (0) | 2024.11.04 |
2-1. Virtualization: 프로세스 관리와 자료구조, Process API (0) | 2024.11.03 |
1. 운영체제 개요 (4) | 2024.11.01 |