celina의 이것저것
02. 프로세스 본문
프로세스의 개념

- 실행 중인 프로그램
- 컴퓨터는 동시에 여러 기능을 수행
** PC (Program Counter)
- CPU 내부적으로 저장돼 있는 레지스터의 일종
- 각 프로세스는 각자 고유의 pc값이 존재한다
- ex) 100줄짜리 코드가 있을때 제일 처음 1번줄 실행 -> pc값 1 , 2번줄 실행 -> pc값 2
=> 프로세스 단위로 CPU가 작업들을 처리하는데 프로세스들은 항상 고유의 상태가 있다
=> 프로세스는 지금 CPU에서 실행중인지 메모리에 있는지 등등 이런 상태를 알 수 있는 상태값이 있다
- 프로세스는 시스템을 동작시키고 동시에 수행되는 활동을 관리
- 운영체제가 프로세스 생성, 종료, 일시정지, 재시작, 꺠우기 등 프로세스가 서비스할 때 수행하는 다양한 연산을 제공한다 이걸 API가 강제로 할수도 있다
- 우리가 만든 프로그램은 디스크에 물리적으로 저장되어있음 실제로 구동이 되기 위해서는 메인 메모리 어느 공간에 할당이 되어야하는데 할당이 되는 순간 프로세스 테스크라고 하는 형태로 할당이됨
=> address space 라는 가상 공간이 main-memory에 load
- 코드영역, 데이터영역(Heap), 스택영역으로 구성되어 있음

프로세스 API
- 프로세스의 여러 상태들을 API로 제공할 수 있다
- 생성
- 제거
- 대기
- 각종 제어
- 상태
프로세스 생성

1. OS는 프로그램을 실행하기 위해 code와 static data를 memory에 load한다
(이 때 이 세가지를 어떻게 올리는지도 중요하다)
프로그램은 disk 같은 저장소에 executable format으로 저장되어 있다
이런 프로그램을 memory로 올리는 것 (paging, swapping)
2. 메모리에 stck을 할당한다 이 stack에 지역변수, 함수 인자, return주소 등을 담는다
main() 함수의 호출을 위한 준비
3. OS는 메모리 공간에 heap공간을 할당 ( malloc() )
4. OS는 I/O와 같은 task initialize 작업을 진행
File Descriptors 3개를 여는 것 등 (stdin, stdout, stderr -persistence)
5. main() 으로 진입해 프로그램을 실행 (CPU는 새로 생성된 프로세스에게 넘어감)
** 세가지를 어떻게 올리는지 중요한 이유
막 붙여서 올렸다가 3기가만큼이 들어가야하는데 3기가의공간은 있어, 그런데 연소된 공간은 없어서 실행이 안되는 경우가 발생할 수 있음
=> 이렇게 메모리를 관리하는게 필요
=> paging, swapping이 관리한다
프로세스 상태
- 프로세스 생명 주기 동안의 구분된 프로세스 상태
1. 실행 상태 : 프로세스가 CPU에서 실행중
2. 준비 상태 : 프로세스가 CPU에서 실행가능 (메모리에 load 된 상태)
3. 블록 상태 : 프로세스가 작업을 진행하기에 앞서 특정 이벤트 발생을 대기

1. 프로세서를 할당 받으면 프로세스의 상태가 준비상태에서 실행상태로 전이
준비 리스트에 있는 첫번째 프로세스에 프로세스를 할당하는것 : 디스패치
프로세스 생성 과정에서 cpu가 새로 생성된 프로세스를 가장 먼저 실행시킴
2. 할당 받은 시간이 만료되면 실행상태에서 준비상태로 전이
3. 프로세스가 블록 되면 실행상태에서 블록상태로 전이
os는 한 프로세스가 시스템의 프로세서를 독점하는 일을 방지하려고 인터럽팅 클록을 두어, 프로세스가 특정 시간 간격 또는 퀀텀동안만 실행할수 있게 함
긴 작업들은 분리해서 처리가능하다. => 병행, 멈추지 않고 계속 일을 시키기위해!
4. 대기하던 이벤트가 완료되면 프로세스가 깨어나고 블록상태에서 준비상태로 전이
프로세스가 현재 실행되고 있느냐 준비되고 있느냐 이 두개를 계속 번갈아가면서 cpu의 작업을 할당받는지 아닌지가 나타나는 실행상태가됨
시분할 정책은 프로세스를 두 개만 계속 번갈아가면서 실행상태로 올리고 준비 상태로 빠지고 다시 실행상태로 올리고 준비상태로 빠지는 것을 반복함
프로세스 상태 예시


자료구조
1. 준비리스트 : 우선순위 정보를 포함, 리스트에서 우선순위가 가장 높은 첫 번째 프로세스가 프로세서를 할당
2. 블록리스트 : 블록된 프로세스가 기다리는 이벤트가 발생하는 순서로 블록해제
문맥 교환(context switches)
- 운영체제게 의해 실행 중인 프로세스를 멈추고 준비 상태에 있떤 다른 프로세스를 실행
- 실행 중인 프로세스의 실행 문맥을 해당 프로세스의 PCB에 저장
- 실행할 준비 상태 프로세스의 이전 실행 문맥을 PCB에서 읽어 로드
- 기본적으로 프로세스에 투명해야함
- 문맥교환이 일어나는동안 프로세서는 의미있는 작업을 전혀 수행하지 못함, 운영체제는 문맥교환에 드는 시간을 최소화 해야함
=> switch에 의한 부하가 크기 때문에 os는 실제로 process들을 실행하기 위해 process정보들을 관리하는데 context를 관리하고, context가 계속 switch되면서 가상화를 이루고 있다
핵심 질문
cpu가상화란?
time sgaring on multiple processes
policy : 가상화 -> 시분할
메커니즘 : context switches로써 실행
'대학생활 > 운영체제' 카테고리의 다른 글
운영체제 과제 (0) | 2023.10.18 |
---|---|
04. LDE 제한적 직접 실행 (0) | 2023.10.10 |
03. 프로세스 API (0) | 2023.10.07 |
01. 하드웨어 소프트웨어 (0) | 2023.09.13 |
00. CPU 가상화 / 메모리 가상화 (0) | 2023.09.13 |