*반효경 교수님의 운영체제 강의 영상을 기반으로 작성되었습니다
1) 프로세스란? 실행중인 프로그램
↳ 프로그램이란? 디스크에 저장된 실행가능한 파일
↳ 프로그램에 해당하는 파일이 메모리에 load되었을 때 프로세스가 된다
2) 어떤 프로세스를 실행할 지는 스케줄링으로 결정
↳ Time Sharing system으로 프로그램을 실행할 때를 기준으로!
1) New : 프로세스가 생성된 상태
2) Running : 스케줄링에 당첨되어 명령어들이 실행되는 상태
3) Waiting : 프로세스에서 I/O 요청 등의 이벤트가 발생하여 대기하는 상태
↳ CPU가 할당되어도 실행할 수 없는 상태
4) Ready : 메모리에 load되어 CPU를 기다리는 중
↳ 이벤트가 종료되어 언제든 실행할 수 있는 상태
5) Terminated : 프로세스가 종료된 상태
1) 스케줄링을 위해 프로세스가 대기하는 곳은 '큐(Queue)'이다
- Job queue
- New상태의 프로세스들의 모임
- 현재 시스템의 모든 프로세스가 대기
- Ready queue
- Ready 상태의 프로세스들의 모임
- 메인메모리에 올라온 프로세스들이 실행을 위해 기다림
- Device queues
- Waiting 상태의 프로세스들의 모임
- I/O 작업이 필요한 프로세스들이 기다림
2) 스케줄러
↳ 큐의 어떤 프로세스를 선택하여 상태를 바꿀 것인가
- Long-term scheduler
- Job queue의 스케줄러
- 어떤 프로세스를 Ready queue에 보낼 것인가를 결정
- 프로세스에 자원을 주는 문제
↳ 위 프로세스 상태도의 new ->ready상태로 가는 화살표의 'admitted'란 메모리에 올라가는 것을 '허락'하는 것이다- long-term scheduler는 메모리에 올라가는 프로세스를 관리하기 때문에 얼마나 많은 프로세스가 메모리에 올라가는 가(degree of multiprogramming)를 제어
- 초, 분 단위
- Short-term scheduler (CPU scheduler)
- Ready queue의 스케줄러
- 다음에 어떤 프로세스를 실행할 지 결정
- 프로세스에 CPU를 주어 실행하는 문제
- CPU가 작업하기 때문에 스케줄링이 아주 빠름
- 밀리초 단위
- Midium-term scheduler (swapper)
- 메모리에 올라간 프로세스의 수(degree of multiprogramming)을 줄이기 위해 필요한 스케줄링
- 프로세스의 상태에 Suspended상태가 추가됨
- 실행이 정지된 상태(suspended)의 프로세스를 메모리에서 제거, 디스크에 저장, 다시 디스크에서 메모리로 가져옴
↳ 정지되는 경우? 사용자가 프로그램을 일시 정지한 경우, 시스템이 메모리에 프로세스가 너무 많아 프로세스를 잠시 중단하는 경우
↳ 다시 실행되는 경우? 외부에서 재개시켜야 가능
↳ swap out : 메모리에서 제거되고 디스크에 저장될 때
↳ swap in : 디스크에 저장되었다가 외부에서 재개 또는 프로세스가 요청한 이벤트가 끝났을 때, 다시 메모리에 load되어 ready queue에서 대기할 때
1) 메모리에 계속 상주하는 Kernel 주소 공간의 'data'영역에 각각의 프로세스마다 생성된 PCB가 저장
2) PCB에 저장되는 것은?
- 운영체제가 관리상 사용하는 정보 : pid, process state, CPU scheduling information(예를 들면 프로세스 별 누적 CPU사용시간, 큐에서의 우선순위)
- CPU 수행 관련 하드웨어 값 : PC(다음에 실행할 명령어 주소), CPU register(연산 결과)
- 메모리 관련 : memory limits
- 파일 관련 : list of open files
3) 왜 필요한가? CPU가 다른 프로세스를 실행하면 현재 프로세스의 정보를 저장해야 하니까!
1) CPU를 현재 사용자 프로세스에서 다른 사용자 프로세스로 넘겨주는 과정
↳ 운영체제가 현재 프로세스 상태를 PCB에 저장하고 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
2) context switch과정은 Short-term scheduling으로 선택된 프로세스를 실행 상태로 만드는 과정
3) 관리를 위해 context swtich 과정에서 CPU는 운영체제를 실행
1) 하나의 프로세스는 여러 개의 쓰레드로 나뉠 수 있다 (multithreaded process)
↳ 왜? 각 multicore(multicpu) 시스템에서 실행 단위(task)를 병렬적으로 처리하기 위해
↳ 각 쓰레드는 마치 분리된 프로세스처럼 CPU가 할당되어 쓰레드별로 처리된다
↳ 예를 들면 프로세스마다 할당된 시간이 3ms, 프로세스 하나가 3개의 쓰레드로 나뉘었다면 하나의 쓰레드는 1ms동안 실행될 수 있다
2) 같은 프로세스의 Thread는 code, data, file을 공유 && 각 쓰레드마다 별도의 PC, register, stack이 할당된다
3) 장점
- 프로세스 내의 한 쓰레드가가 block된 상태(waiting)여도 다른 쓰레드가 CPU를 할당받아 실행 될 수 있다
↳ 응답 속도가 빠르다- 동일한 일을 하는 별도의 프로세스는 별도의 주소 공간을 가져 낭비를 초래하나, 동일한 일을 하는 별도의 쓰레드는 공유하는 데이터가 있기 때문에 자원을 절약할 수 있다
- 쓰레드를 만들고 CPU를 switching 하는 게 비용이 적다
- CPU가 여러 개인 MultiProcessor의 경우 각 쓰레드는 병렬적으로 작동할 수 있다
4) 구현
- 다중 쓰레드의 존재를 운영체제가 아는 경우
- CPU를 넘길 때 스케줄링으로 다음 실행할 쓰레드를 스케줄링으로 선택
- 다중 쓰레드의 존재를 운영체제가 모르는 경우
- 사용자 프로그램이 라이브러리의 자원을 받아 여러 개의 쓰레드를 생성하고 관리한다
- 사용자 모드에서 실행되기 때문에 제약점이 있을 수 있다