Section 01 : 프로세스(process)의 이해
- 오늘날의 운영체제를 가리켜 "멀티 프로세스(Multi-Process) 운영체제"라고 한다.
- "프로세스라는 것이 여러 개 존재할 수 있는 운영체제"
프로세스란 무엇인가?
- 실행 중에 있는 프로그램을 의미한다.
- block.exe는 프로그램 -> 더블클릭 -> 메모리 할당 -> 바이너리 코드가 메모리에 올라감
- 이순간부터 프로그램은 프로세스라 부른다.
프로세스를 구성하는 요소
Execution of "c" program
- 공부하다 배운 메모리 구조
- Data 영역
- Stack 영역
- 지역변수와 함수 호출시 전달되는 인자값들을 저장하는 곳
- Heap 영역
- 동적할당(malloc,c++(new))을 할때 쓰는 영역
- Code(ROM)
- 실행파일을 구성하는 명령어들이 올라가는 메모리 영역을 가리킨다.
P130 5-2사진
- 이 사진 자체가 프로세스라고 표현한다.
- 프로그램 실행을 위해서 명령어들이 메모리 공간에 올라와 있는 상태이고, 프로그램 실행을 위해서 필요한 메모리 공간이 할당되어 있는 상태이기 때문이다.
- 여러개의 프로그램을 돌리는 상황
- 메모리 구조는 실행되고 있는 프로세스 개수 만큼 생성된다.
Register Set
- 프로그램을 실행을 위해서 레지스터는 절대적으로 필요하다.
- CPU 내에 존재하는 레지스터들은 현재 실행 중인 프로그램을 위한 데이터들로 채워진다.
- 레지스터들의 상태까지도 프로세스의 일부로 포함시켜 말할 수 있다.
Section 02 : 프로세스의 스케줄링과 상태 변화
- 질문 : "CPU는 하나인데, 어떻게 여러 개의 프로그램이 동시에 실행 가능한 것인가?"
- 기본적으로 CPU는 한 순간에 하나의 프로그램만 실행 가능하다. 동시에 둘 이상의 프로그램을 실행시킬 수 없다.
프로세스의 스케줄링(Scheduling)
- 해결할 방법
- 하나의 CPU가 여러 개의 프로세스를 고속으로 번갈아 가면서 실행해야 한다.
- CPU는 아주 빨라서 사람은 동시에 사용한다고 느낀다.
- 멀티 프로세스 운영체제에서 여러 개의 프로세스가 실행되는 것처럼 보이는 이유?
- 여러 개의 프로세스들이 CPU 할당 시간을 나누기 떄문이다.
스케줄링의 기본 원리
- 스케줄링(Scheduling)
- 스케줄링 알고리즘(Scheduling Algorithms)
- 스케줄러
- 스케줄링 알고리즘을 적용해서 실제로 프로세스를 관리하는 운영체제 요소(모듈)이다.
- 운영체제를 구성하는 중요한 요소 중 하나.
- p133 5-3
멀티 프로세스는 CPU를 바쁘게 한다
- 상황 A,B,C 프로세스를 돌려야되는 상황
- 첫번쨰 : 고전적인 방법
- A실행 A완전히 종료 B실행 B완전히 끝나고 C실행
- 실행해야 할 일을 순차적으로 실행시키는 것
- 두번쨰 : 동시에 실행되는 형태
- A,B,C 다 실행시킨 후 스케줄러에 의해서 프로세스 관리
- 정해진 순서에 의해서 CPU의 실행 시간을 나눠서 할당받아 실행하는 형태
- 둘중에 뭐가 더 좋아보이는가?
- 대충 생각하면 끝내는데 시간은 별차이없어보인다. 그러나 실행되는 프로그램의 특성에 따라서 많은 차이를 보인다.
- 프로그램이 실행되는 과정에서 많은 시간을 I/O에 할당함.
- I/O 종류
- 데이터의 입력 및 출력.
- 네트워크(인터넷)로 연결되어 있는 호스트(컴퓨터)와 데이터를 송-수신.
- 입력 및 출력에 관련된 일을 할 경우 상당 시간 CPU는 아무 일도 하지 않고 대기한다.
- I/O 측면만 고려한다면 고전적인 방식 < 멀티 프로세스 기반 프로세스 효율적
- 고전적인거는 A가 I/O할떄 CPU는 아무일도 안함
- BUT 멀티 프로세스는 처리하면 A가 I/O중일떄 B 실행 가능
- 실행되어야 할 프로세스가 다수 존재하는 상황이라면, CPU에게 쉴 틈이 주어지지 않는다.
프로세스의 상태 변화
P134 5-4
상황 1 : S(Start)에서 Ready 상태로의 전이를 보여준다
- S
- 프로세스 생성과 동시에 Ready 상태로 들어간다
- Ready 상태에 있는 프로세스는 CPU에 의해 실행되기를 희망하는 상태
- 의문
- "프로세스가 생성되었으면, 바로 실행되어야 하는것 아닌가?"
- 멀티 프로세스기 떄문에 스케줄러에 의해서 선택되기를 바라며, Ready 상태가 되어야 한다.
상황 2 : Ready 상태에서 Running 상태로의 전이를 보여준다.
- Ready 상태에 있는 프로세스 중 스케줄러에 의해 선택된 프로세스는 Running 상태가 되어 실행되는것
- 스케줄러는 스케줄링 알고리즘을 기반으로 Ready상태 프로세스 선택
상황 3 : Running 상태에서 Ready 상태로의 전이를 보여준다.
- 프로세스들은 생성 시 중요도에 따라서 우선순위(Priority)라는 것이 메겨진다.
- 우선순위 A > B
- B가 실행중이다 A가 실행되면 B는 Ready가 되고 A가 Running상태가되고 A가 끝날떄까지 B는 Ready로 기달린다.
p136 5-5사진
상황 4 : Running 상태에서 Blocked 상태로의 전이를 보여준다.
- 실행 중에 있는 프로세스가 실행을 멈추는 상태(Blocked 상태)로 들어가는 것이다.
- 데이터 입/출력에 관련된 일을 하는 경우에 발생한다.
- 입/출력떄는 CPU에 의해서 프로세스가 더이상 실행 될 수 없다.
- 데이터 입/출력을 진행하는 프로세스는 잠시 내려오게하고(Blocked 상태가 되게 하고), Ready 상태에 있는 프로세스 중 하나를 대신 실행시키는 것이 CPU를 효율적으로 사용하는 것.
- P136 5-6
상황 5 : Blocked 상태에서 Ready 상태로의 전이를 보여준다.
- Blocked 상태는 스케줄러에 의해서 선택될 수 없는 상태를 의미한다.
- Ready 상태는 스케줄러에 의해 선택되어 지금 당장이라도 실행 가능한 상태
- Blocked 상태는 스케줄러에 의해서 선택될 수 없는 상태이다.
- 입/출력이 완료되면 Blocked -> Ready 가된다.
프로세스의 상태 변화, 시나리오 다시 이해하기
혼란의 최소화
- Running 상태에서 Ready 상태로 전이되는 상황은 아직도 해 야 할 일이 있음에도 불구하고 어쩔 수 없이 다른 프로세스에게 실행을 양보하는 상황
- Blocked 상태는 스케줄러 관심 밖에 있는 상태이다.
사진 으로 정리하기
Section 03 : 컨텍스트 스위치(Context Switching)
- 지금까지는 장점만 말한것 단점도 존재한다
- 실행 중인 프로세스(Running 상태의 프로세스)의 변경은 시스템에 많은 부하를 가져다 주기도 한다.
- "CPU 내에 존재하는 레지스터들은 현재 실행 중에 있는 프로세스 관련 데이터들로 채워진다"
- 고민
- 실행 중인 프로세스가 변경되면 CPU 내에 존재하는 레지스터들의 값이 변경되기 떄문이다.
- 프로세스 A 실행중에 프로세스 B를 실행(우선순위 A<B)한다고 가정
- 프로세스 B가 실행되기 전에, 현재 레지스터들이 지니고 잇는 데이터들은 어디가에 저장해야만 한다.
- 프로세스 A가 실행을 이어서 진행할 경우 필요한 데이터들이기 떄문이다.
- 그림 P141 5-11 사진
- 컨텍스트 스위칭 작업 단계 예시
- A가 실행 중이라 레지스터안에는 프로세스 A의 데이터가 들어있고 B는 현재 Ready 상태로 프로세스 b와 관련된 레지스터 정보가 메모리에 저장(Backup)되어 있당.
- B가 Running상태가 될경우 데이터로 레지스터들이 채워진당 그래야 작업을 이어서 진행 가능하다.
- B가 Running상태가 상태로 돌아가고, A는 Ready 상태로 빠져 나와야함.
- p142 5-12사진
- "실행되는 프로세스의 변경과정에서 발생하는 컨텍스트 스위칭은 시스템에 많은 부담을 준다."
- 멀티 프로세스의 단점
- 레지스터 갯수 많을 경우 성능 저하
- 프로세스별로 관리되어야 할 데이터 종류가 많을 경우 성능 저하
- 시스템을 디자인하는데 잇어서(프로그램 구현) 컨텍스트 스위칭 부담을 최소화 할려고 노력을 많이한다.
고려사항
- 프로그램 실행과정에서 발생하는 I/O를 고려해 보면, 멀티 프로세스 기반의 프로그램 실행은 많은 성능 향상
- 컨텍스트 스위칭이 미치는 영향을 고려한 경우, 오히려 성능에 저하를 가져올 수 있다.
1차 24.01.03
2차 24.01.04
3차 24.01.05
4차 24.01.09
5차 24.01.10