프로세스
- 실행 중인 프로그램
- 프로그램은 디스크 상에 존재하며 실행을 위한 명령어와 정적 데이터의 묶음
CPU 가 여러 개 존재한다는 환상을 어떻게 제공하는가
- 운영체제는 CPU 를 가상화하여 프로그램이 동시에 실행 되는 것 처럼 보이게 함
- 시분할 (time sharing) 이라 불리는 기법을 사용해 원하는 수 만큼의 프로세스를 동시에 실행할 수 있게 함
- CPU를 공유하기 때문에 각 프로세스의 성능은 낮아짐
- Context switching
- CPU 에서 프로그램 실행을 잠시 중단하고 다른 프로그램을 실행하는 것
프로세스의 개념
- 실행중인 프로그램을 프로세스라 함
- 프로세스의 구성요소를 이해하기 위해 하드웨어 상태를 알아야 함
- 하드웨어 상태 중 가장 중요한 요소는 메모리
- 명령어, 실행 프로그램이 읽고 쓰는 데이터는 메모리에 저장됨
프로세스 API
- 생성 (Create)
- 제거 (Delete)
- 대기 (Wait)
- 각종 제어 (Miscellaneous Control)
- 상태 (Status)
프로세스 생성
- 프로그램 코드와 정적 데이터를 메모리, 프로세스의 주소 공간으로 load
- 요즘 시스템에서 프로그램은 디스크 또는 플래시 기반 SSD에 실행 파일 형식으로 저장
- 초기 운영체제는 프로그램 실행 전에 코드와 데이터를 모두 탑재함
- 현대의 운영체제는 필요할 때 필요한 부분만 메모리에 탑재 함
- 특정 크기의 메모리 공간이 프로그램의 스택(Stack) 용도로 할당되어야 함
- 지역 변수, 함수 인자, 리턴 주소
- 프로그램의 힙 (heap) 을 위한 메모리 영역을 할당 함
- 동적으로 할당된 데이터를 저장하기 위해서 사용
- 가변적인 자료 구조를 위해 사용
- 입출력과 관련된 초기화 작업을 수행함
- Unix 시스템에서 각 프로세스는 기본적으로 STDIN, STDOUT, STDERR 장치에 해당하는 세 개의 파일 디스크립터를 가짐
프로세스 상태
- Running
- 프로세스가 명령어를 실행하고 있음
- Ready
- 실행할 준비가 되었지만 다른 프로세스를 실행하고 있는 이유등으로 대기 중
- Blocked
- 프로세스가 다른 사건을 기다리는 동안 수행을 중단 시키는 연산
- 프로세스가 디스크에 대한 입출력 요청을 했을 때 입출력이 완료될 때 까지 대기 상태가 되고, 다른 프로세스가 실행 상태로 될 수 있음 (디스크를 읽거나, 네트워크로 부터 패킷을 기다릴 때)
- 작업이 끝나면 준비 상태로 전환되고 스케줄링 정책에 따라 바로 실행 될 수 도 있음
- 프로세스가 다른 사건을 기다리는 동안 수행을 중단 시키는 연산
자료 구조
- 운영체제도 일종의 프로그램임, 다양한 정보를 유지하기 위한 자료 구조를 가지고 있음
- 프로세스의 대기 상태를 파악하기 위해 준비 상태의 프로세스들을 위한 프로세스 리스트 와 같은 자료구조를 유지함
- 시스템에 존재하는 모든 프로세스에 대한 정보를 가짐
- Register context 자료구조는 프로세스가 중단되었을 때 해당 프로세스의 레지스터 값들을 저장함
- 이 레지스터 값들을 복원하여 프로세스 실행을 재개함