[Window System Programming] Chapter 05. 프로세스와 스케쥴러 / 프로세스 생성
2-5 프로세스와 스케쥴러 / 프로세스 생성
- 프로세스와 스케쥴러
- 프로세스 생성
프로세스와 스케쥴러
프로세스
메인 메모리로 이동하여 실행 중인 프로그램
하드디스크에 있는 실행 파일을 실행시키는 순간에 메모리 공간이 할당되고 이 순간부터 프로그램은 프로세스
메모리 공간
메모리 공간 : 데이터 영역 + 스택 영역 + 힙 영역 + 코드 영역
-> 데이터 영역 : 전역 변수나 static 변수 할당을 위한 영역
-> 스택 영역 : 지역변수 할당과 함수 호출 시 인자 값 저장을 위한 영역
-> 힙 영역 : 동적 할당을 위한 영역
-> 코드 영역 : 프로그램 실행 시, 명령어들이 올라가는 영역
ex) RAM이 256MB인데 프로세스의 메모리 공간을 4GB 할당 받는 경우
-> 메모리 공간 전체가 RAM에 올라갈 수 없음
-> 하드디스크에게 도움을 받아야하며, 가상 메모리의 형태로 도움을 받게 됨
프로세스 요약
프로세스 = 메모리 구조 + 레지스터 Set
-> 레지스터는 A라는 프로세스가 실행되면 A와 관련된 데이터로 채워짐
-> B라는 프로세스가 실행되면 기존 A와 관련된 데이터는 가상 메모리에 잠지 저장되고 레지스터에는 B 데이터 로드
-> 위의 동작 방식 때문에 프로세스의 범주에 메모리와 레지스터도 포함
컨텍스트 스위칭
프로세스 A는 1+1 연산을 실행, 프로세스 B는 2+2 연산을 실행
프로세스 A 실행 후, 프로세스 B가 실행되는 경우
-> 레지스터는 기존 프로세스 A 관련 데이터로 구성되어있고 프로세스 B의 실행을 위해 데이터를 교체해야 함
-> 기존 프로세스 A 관련 데이터를 다른 메모리에 저장하고 프로세스 B의 데이터를 레지스터에 등록하는 과정 수행
-> 이러한 과정이 컨텍스트 스위칭
컨텍스트 스위칭 : 레지스터 내 하나의 프로세스 관련 데이터를 다른 프로세스의 데이터로 교체하는 작업
-> 매우 고속으로 이루어지기 때문에 CPU가 두 개의 프로세스를 동시에 실행하는 것처럼 보임
-> 프로세스-레지스터 간 다양한 기법들 존재
프로세스 스케쥴러
OS에서 스프트웨어적으로 제공하는 장치, 프로세스를 스케쥴링하는 작업을 담당
하나의 CPU가 여러 개의 프로세스를 동시에 실행하기 위한 효율적 동작을 관리하기 위해 존재
-> CPU 입장에서는 스케쥴러도 하나의 소프트웨어(프로세스)
-> 상기 이유로 스케쥴러 동작 중에는 다른 프로세스가 동작하지 못함
-> 좋은 OS란 스케쥴러를 적게 동작시키면서 프로세스를 효율적으로 관리하는 운영체제
프로세스는 생성되면 우선순위가 정해지고, Ready와 Running 등의 상태 변화가 일어나며 동작
프로세스의 상태
Running, Ready, Block
Running : 프로세스가 실행 중인 상태
Ready : 프로세스가 동작할 준비를 마치고 현재 Running 상태의 프로세스가 완료되기를 기다리는 상태
-> Running 중인 프로세스가 완료되는 직후 상태 변화가 일어나는 것이 아닌 스케쥴러가 동작을 지시해주어야 함
-> 즉, 스케쥴러의 명령을 기다리고 있는 상태
Block : I/O 동작을 수행 중인 프로세스들을 위한 별도의 상태
ex) 프로세스 A가 사칙연산을 수행하고 프로세스 B는 I/O 연산을 수행하는 경우
-> 사칙연산은 ALU에서 발생하고 따라서 CPU에 의존적
-> I/O 연산은 단순 입출력 연산으로 CPU에 의존적이지 않음
-> 프로세스 B가 Running 상태에 돌입하여 I/O 연산의 완료를 기다리는 상황인 경우 계속해서 Running 상태일 필요 없음
-> 프로세스 B는 Block 상태로 이동하고 프로세스 A가 Running 상태로 전환되어 두 프로세스 간 작업의 병행이 이루어짐
-> I/O 연산 마무리 이후 프로세스 B는 다시 Ready 상태로 전환
프로세스와 스케쥴러 요약
스케쥴링 : 프로세스의 동작 순서를 정하는 과정
스케쥴링 알고리즘 : 프로세스 간 동작 순서 알고리즘
스케쥴러 : 스케쥴링 알고리즘을 통해서 프로세스를 관리하는 소프트웨어적 장치
프로세스 생성
CreateProcess()
프로세스의 생성을 위해 Windows OS에서 제공하는 함수
부모 프로세스 : 해당 함수를 호출하는 프로세스
자식 프로세스 : 부모 프로세스에 의해 생성된 프로세스
-> 코드를 통한 함수 호출 시 위와 같은 관계 형성
-> 추가로, 바탕화면도 하나의 프로세스이며 바탕화면에서 프로그램을 실행시키면 같은 원리로 바탕화면이 부모, 프로그램이 자식 프로세스의 관계가 형성
CreateProcess() 함수 사용을 위한 구조체
1. lpStartupInfo : 함수가 구조체를 생성한 이후, 그 정보를 반환받은 값을 담아내기 위한 구조체
2. lpProcessInformation : 프로세스의 특성 정보를 담고 있는 구조체
-> 함수가 이를 참조해서 프로세스를 생성
프로세스 구현
1. Adder Process : 덧셈 연산 수행
2. Create Process : Adder Process를 생성하는 부모 프로세스