Study/Windows System Programming

[Window System Programming] Chapter 05. 프로세스와 스케쥴러 / 프로세스 생성

코딩뚜벅이 2024. 1. 14. 14:55

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를 생성하는 부모 프로세스