1.1 작업을 동시에 실행하는 일에 대한 간략한 역사
프로세스
운영체제는 프로세스마다 메모리, 파일 핸들, 보안 권한 등의 자원을 할당하고,
프로세스끼리는 소켓, 시그널, 공유 메모리, 세마포어, 파일 등 다양한 통신 수단이 제공된다.
- 여러 프로그램을 동시에 실행할 수 있는 운영체제를 개발하게 된 요인
- 자원 활용 : 하나의 프로그램이 가다리는 동안 다른 프로그램을 실행하도록 지원하는 편이 더 효율적이다.
- 공정성 : 프로그램 하나를 끝까지 실행해 종료된 이후에 다른 프로그램을 시작하는 것보다 더 작은 단위로 컴퓨터를 공유하는 방법이 바람직하다.
- 편의성 : 여러 작업을 전부 처리하는 프로그램 하나를 작성하는 것보다 각기 일을 하나씩 처리하고 필요할 때 프로그램 간에 조율하는 프로그램 여러 개를 작성하는게 더 좋다.
스레드
자원 활용, 공정성, 편의성 등 프로세스 개념을 만들어내게 된 것과 같은 동기를 갖고 스레드가 고안됐다.
스레드는 메모리 (힙 메모리), 파일 핸들과 같이 프로세스에 할당된 자원을 공유한다.
- 각 스레드는 각기 별도의 PC, 스택, 지연 변수를 갖는다.
- 스레드로 분리하면 멀티프로세서 시스템에서 하드웨어 병렬성을 이용할 수 있다.
- 한 프로그램에서 여러 프로세스를 동시 여러 개의 CPU 에 할당해 실행시킬 수 있다.
스레드를 가벼운 프로세스라고 부르기도하며, 현대 운영체제의 대부분은 프로세스가 아니라 스레드를 기본 단위로 CPU 자원의 스케줄을 정한다.
1.2 스레드의 이점
프로세서 스케줄링의 기본 단위는 스레드이기 때문에 스레드 하나로 동작하는 프로그램은 한 번에 최대 하나의 프로세서만 사용한다.
- 활성 상태인 스레드가 여러 개인 프로그램은 멀티 프로세서에서 동시에 실행될 수 있다.
- 프로세서가 하나여도 스레드 하나가 동기 I/O 작업이 끝나기를 기다리면서 대기 상태에 들어가는 동안,
다른 스레드가 계속 실행될 수 있다.
1.2.2 단순한 모델링
종류별 작업마다 또는 시뮬레이션 작업의 각 요소마다 스레드를 하나씩 할당하면 순차적인 작업처럼 처리할 수 있고, 스케줄링, 교차 실행되는 작업, 비동기 I/O, 자원 대기 등 세부적인 부분과 상위의 비즈니스 로직을 분리할 수 있다.