Point: I/O 작업 구간을 효율적으로 사용하지 못함
애플리케이션에서 시스템의 입력과 출력에 의존하는 경우 I/O 작업이라고 한다. 일반적으로 하드디스크나 랜카드와 같은 주변장치를 사용해야 하는 경우가 이에 해당한다.
애플리케이션에서 하드디스크나 랜카드를 사용하기 위해서는 리눅스 커널에서 제공하는 추상화된 파일(File) 레이어를 사용해야 한다.
웹애플리케이션서버를 만들게 되면 주로 REST API를 호출하거나 데이터베이스(Database)에 읽고 쓰는 작업을 많이 하게 되는데 이 모든 것이 I/O 작업에 해당한다.
멀티프로그래밍은 프로세스의 I/O 작업 시간에 다른 프로세스의 작업을 가능하게 한다. 그래서 단일 프로세스 시스템보다 더 향상된 성능을 얻을 수 있다.
Point: 프로세스1의 작업이 너무 긴 경우 프로세스2는 프로세스1의 작업이 끝나길 계속 기다려야 한다.
여러 프로세스가 CPU를 일정한 시간 동안 사용할 수 있게 스케줄링한다 (TDM). 할당된 일정 시간이 지나면 다른 프로세스에 CPU를 사용할 수 있도록 다시 배정하는 작업이 발생하는데 이를 문맥 교환(Context Switching) 이라고 한다. 프로세스 간에 일정 시간의 기회가 계속 오기 때문에 응답시간을 최소화할 수 있다.
Point: 멀티태스킹에서는 응답성을 향상하기 위해서 문맥 교환이 자주 일어나게 된다. 결과적으로 응답성은 좋아졌지만, 문맥 교환이라는 무거운 작업을 자주 실행시켜야 한다.
프로세스는 독립적으로 할당된 메모리공간과 이에 관련된 관리 블록을 가지고 있다. 문맥 교환이 일어나게 되면 해당 정보를 변경되는 프로세스의 정보로 변경하는 작업이 일어나게 된다.
Guide to the “CPU-bound” and “I/O bound” Terms
Operating System — Linux
Operating System architecture
Computer multitasking
Structure of the Process Control Block