프로세스( Process )
。RAM에 적재되어실행중이거나 대기 중인프로그램
▶CPU에서 실행되기위한프로그램을보조기억장치에서 찾아RAM으로 복사된프로그램을 의미
▶프로그램은 비실행된 프로그램으로서보조기억장치에 저장된프로그램으로프로세스와 차이가 존재
。OS의 작업단위
▶ 운영체제는 프로그램 단위로 실행하므로
。한번에 하나의스레드를 처리하는프로그램
▶프로세스내 복수의스레드들의 동시실행이 불가능
。소프트웨어 스레드는프로세스의 경량판
▶A thread is a lightweight process:스레드프로세스
。OS는프로세스를Create하고Terminate하는 Mechanism이 존재해야한다.
프로세스 메모리 레이아웃( Process Memory Layout )
。보조기억장치에서RAM으로 복사된 각프로세스는RAM상에서 다음영역으로 구분되어 저장되어 있으며 이러한메모리 영역 구성을메모리 레이아웃이라고 한다.
▶ RAM 상 높은 주소영역에 위치
▶Text / Data / Heap / Stack
。멀티 스레딩의프로세스의 경우프로세스내스레드들은 동일한Text Section / Data Section / Heap Section의프로세스 주기억장치 영역을 공유하며 각스레드들은 고유한 스레드ID / Stack / 프로그램 카운터 / 레지스터 집합를 가진다.
▶멀리스레딩을 통해 동일한프로세스 자원을 공유하면서 서로스레드 별로 독립적으로Concurrently하게함수를 실행
메모리 레이아웃구조
Text Section:
。프로세스의 실행가능한명령어 코드들이 저장되는영역
▶CPU는프로세스의text영역에 저장된 명령어를FETCH
。CPU 스케쥴러및CPU 스케쥴링은Text Section내에서코드로 구현
。외부에 의해 쉽게 변경되지 않도록READ Only속성을 지님.
Data Section
。프로세스의전역 변수/Static 변수가 저장되는영역
。스케쥴링 큐의Ready Queue와Wait Queue는Data Section에 저장
。Text Section과 달리Read Only가 아니므로변수값은 프로그램 실행 중동적으로 변경이 가능
Initialized Data Section
。초기화된전역 변수/Static 변수이 저장되는 영역
Uninitialized Data Section
。bss영역이라고 하며, 초기화되지 않은전역 변수/Static 변수이 저장되는 영역
Heap Section
。프로세스의런타임에서동적으로 할당되는메모리 공간을 저장하는영역
▶동적 메모리 할당에 사용되는 영역
。Java의new keyword를 통해 객체 생성 시 저장되는 영역
Stack Section
。함수 호출시 함수의지역변수와매개변수가 저장되는임시저장공간
메모리 레이아웃예시
좌측 소스코드(a.c)를 컴파일하여 프로그램(a.out) 생성 후 실행할 경우프로세스로서RAM에 적재되어 다음메모리 레이아웃으로 구성
▶소스코드는Text Section에 기계어로 컴파일 되어 저장되어CPU에서 한줄씩FETCH
。변수x는 초기화가 되지않으므로uninitialized data영역에 저장
。변수y는 초기화가 되므로initialized data영역에 저장
。argc,argv[]: 외부에서 전달되는 값
。values,i:main()호출 시 생성되는지역변수이므로stack영역에 저장
。values의 경우malloc을 통해Stack영역에서Heap영역으로 저장됨
。for문의 경우 기계어 컴파일 시 명령어이므로text영역에 저장됨
프로세스의 생명주기( Life Cycle )
。프로세스실행 시의Life Cycle은 5단계Queue의Process State로 구성
。I/O작업 등에 의한State변화 시
Running▶Waiting▶Ready▶Running
。Process작업시간이 초과하여Interrupt발생 시
Running▶Ready▶Running
New:
。프로세스가 생성되고있는 상태
▶보조기억장치의프로그램이주기억장치로복사되는 단계
Ready:
。프로세스가프로세서( =CPU)에게CPU 제어권을 할당받기를 대기중인 상태
▶프로그램이프로세스로서주기억장치로복사및CPU를 기다리는 상태
。Context Switching이 수행되기전에 우선CPU에 할당 준비가 되었음을 지시하는 단계
▶Running전 반드시 거쳐가야함
디스패치( Dispatch ) : CPU 디스패처
。CPU 스케쥴러에게 선택된프로세스를 실제로CPU에할당하는 과정
Running:
。디스패치를 통해 선택된프로세스가CPU를점유하여명령어를 실행하고 있는 상태
Suspended:
。주기억장치에 너무 많은프로세스가 존재하여 중기 스케쥴러에 의해 선별되어보조기억장치로 이동( =swap out)된프로세스 상태
Waiting:
。프로세스가 특정Event의 발생을 기다리는 중인 상태
ex )I/O완료 , 신호수신 등
▶I/O 인터럽트가 발생 시Context Switching에 의해 다른프로세스로 교체되어CPU 제어권이 회수되고I/O가 완료될 때까지장치컨트롤러로 부터의인터럽트발생을 대기중일때
Terminated:
。프로세스의 실행이 종료된 상태
프로세스 스케쥴링( Process Scheduling )
。RAM에서생명주기상Ready 상태에 있는프로세스중 CPU 스케쥴링 정책에 따라프로세스에게CPU를 할당하는 과정
▶멀티프로그래밍 환경에서시분할을 구현하기 위해스케쥴링 큐을 사용해서CPU 제어권을 어떤프로세스에게 줄지 결정
멀티프로그래밍: Multi Programming : 멀티프로그래밍
。RAM에서 적재중인프로세스들을 단일CPU에 의해Context Switching을 통해Interleaving하면서CPU 유휴시간을 최소화하는OS기법
▶프로세스가입출력 작업시 다른프로세스에게CPU 제어권을 전달하는 등 항상CPU에서프로세스가 실행되도록 하여CPU사용률을 극대화
- Interleaving
。'끼워넣기'라는 뜻으로서 여러프로세스 / 스레드가 서로 번갈아Execute되는것을 의미
▶멀티프로그래밍을 구현
시분할: Time Sharing :
。여러프로세스가 단일코어를 매우 짧은 시간(quantum)단위를 기준으로 처리하여 매우 높은 빈도로Context Switching가 발생하도록 하여프로세스를 교체하는 비중이 많아지게하여작업응답시간을 최소화
▶시분할을 통해Concurrency에 의해 사용자 입장에서 복수의 프로그램들이 동시에 실행되는것처럼 보이게된다.
스케쥴링 큐( Scheduling Queues )
。CPU에 의해CPU 스케쥴링에 따라 처리될프로세스들을 관리 및 저장하는Queue 자료구조
。Queue 자료구조는 보통PCB로 구성된Linked List로 구현한다
。스케쥴링 큐의Ready Queue와Device Queue는프로세스 메모리 레이아웃상Data Section에 저장
스케쥴링 큐종류
Job Queue
。실행되지않은프로그램을 저장하는Queue 자료구조
。보조기억장치에 저장된New 이전 상태로주기억장치로 복사하기 전 단계
▶프로그램이주기억장치로 복사 시Ready Queue로 이동
Ready Queue:
。프로세스가Ready상태로서CPU의코어에 의해Execute되도록 대기하는Queue 자료구조
▶프로세스가 시스템에 진입하거나Waiting상태에서Ready로 변환된 경우 대기
。CPU 스케쥴러를 통해Ready Queue에서 대기중인프로세스를 선택하여디스패처를 통해CPU에게 할당
Wait Queue
。특정인터럽트(장치 컨트롤러에 의한입출력 작업 완료)의 발생을 기다리는Waiting 상태의프로세스를 저장하는Queue 자료구조
▶ 실행중인프로세스가I/O 작업을 접할 경우 작업이 오래걸리므로Waiting상태로Wait Queue에서 대기
。I/O 작업이 완료되어인터럽트발생 시Wait Queue에서Ready Queue로프로세스를Ready 상태로 변경 후 전달
스케쥴링 큐 원리( Queueing Diagram )
I/O Request:
。실행중인프로세스가입출력 I/O 작업으로 인해CPU 반납하면서Wait Queue로 이동
▶입출력 I/O 작업완료되어인터럽트발생 시Ready Queue로 이동
Time Slice Expired:
。실행중인프로세스가시분할을 통한Time Slice 만료가 발생하여CPU 점유시간이 종료된 경우 즉시CPU 반납및Ready Queue로 이동
fork a child
。프로세스가fork를 통한자식 프로세스를 생성 시CPU 반납및Wait Queue에서 대기
▶자식 프로세스가Ready Queue로 이동 후 실행되어 종료된 경우Ready Queue로 이동
wait for an interrupt
。프로세스가Wait Queue에서인터럽트발생을 기다리다가인터럽트발생 시Ready Queue로 이동
출처
。운영체제 공룡책 강의