1. 프로세스 개념
Process : 실행중인 프로그램
운영체제의 입장에서 작업의 단위가 된다
프로세스가 실행되기 위해선 특정 자원들이 필요하다.
- CPU 시
- memory
- files
- I/O 장치
프로세스들의 메모리 레이아웃은 몇가지 섹션들로 나뉜다
1. 텍스트 섹션 : 실행가능한 코드 명령어
2. 데이터 섹션 : 전역 변수들
3. Heap 섹션 : 프로그램 실행시간동안 동적으로 할당되는 메모리
4. Stack 섹션 : 함수를 호출할때 사용되는 임시 데이터 저장소(함수 인자들, 리턴 주소들, 로컬 변수)
프로세스가 실행되면, 스스로의 state를 변화시킨다
1. New : 프로세스가 생성된 상태
2. Running : 지시가 실행된 상태 (CPU를 점유해서 프로세스의 명령어를 CPU에 로드해 실행하는 상태)
3. Waiting : 프로세스가 특정이벤트(I/O 종료, 신호 수신)가 발생하기를 기다리는 상태
4. Ready : 프로세스가 CPU를 배정받기를 기다리는 상태
5. Terminated : 프소세스가 실행을 끝낸 상태
PCB (Process Control Block) / TCB (Task Control Block) : 프로세스가 가져야하는 모든 정보를 저장하는 구조체
각 프로세스는 PCB로 OS에 대표된다
PCB는 특정 프로세스와 연관된 많은 정보의 조각들을 가지고 있다.
- Process state :
- Program counter : 프로그램의 메모리 주소를 저장
- CPU Registers : IR(Information Register) / DR(Data Register)
- CPU-scheduling information
- Memory-management information
- Accounting information
- I/O status information
프로세스는 하나의 실행 스레드를 수행하는 프로그램이다.
Single thread of Control 은 프로세스가 한번에 한가지 작업만 하도록 한다
현대의 OS는 확장된 프로세스의 개념을 가진다.
- 프로세스가 여러개의 실행 스레드들을 가지는것을 허용해 한번에 하나 이상의 작업을 수행(multi-tasking / multi-processing)하도록 한다
Thread : 가벼운 프로세스
2. Process Scheduling
- Multiprogramming의 목적은 여러개의 프로세스를 동시에 실행해 CPU 사용효율을 최대화시키는 것
- Time Sharing의 목적은 프로세스들간의 CPU코어들을 자주 변경해서 사용자들이 각각의 프로그램이 동시에 실행되는 것처럼 느끼도록 하는 것
- Scheduling Queues(FIFO) :
- 프로세스들이 시스템에 들어갈때, 그들은 Ready queue(CPU의 코어에서 실행되기 전에 Waiting과 Ready하는 곳)에 들어간다.
- 특정 이벤트가 발생하기를 waiting하는 프로세스들은 wait queue에 들어간다.
- 이런 큐들은 일반적으로 PCB들의 Linked List로 구현된다.
- Context Switch : 프로세스의 Context는 PCB에 저장된다.
- Context (프로세스 입장에서 이 프로세스가 사용되고 있는 상태)
- Interrupt가 발생했을때, 시스템은 현재 실행중인 프로세스의 Context를 저장한다. 나중에 그 Context를 되살려서 재개될수 있도록 한다.
- Context Switch는 CPU 코어들을 다른 프로세스로 switch해주고, 현재 프로세스의 state 저장과, 다른 프로세스의 state 복구를 수행하는 작업이다.
3. Operations on Processes
OS는 프로세스를 생성하고 프로세스를 종료하는데 필요한 메커니즘을 제공해야한다.
한 프로세스는 여러개의 새로운 프로세스들을 생성할수도 있다.
- 프로세스를 만드는 프로세스 : parent process
- 새롭게 생성된 프로세스 : child process
실행의 두가지 경우
1. 부모 프로세스가 자식 프로세스들과 계속해서 동시에 실행되는 경우
2. 부모 프로세스가 일부 혹은 전체 자식프로세스가 종료될때까지 기다리는 경우
address-space의 두가지 경우
1. 자식 프로세스가 부모 프로세스의 복제인 경우
2. 자식 프로세스가 새로운 프로그램을 로딩하는 경우
프로세스는
1. 마지막 문장의 실행을 종료했을때,
2. exit() 시스템 콜 : OS에게 삭제하도록 요청
3. OS deallocates and reclaims all the resources: 메모리를 할당하고, 파일들을 열고, I/O buffer등등
종료된다.
Zombie and Orphan
zombie process : 자식 프로세스가 종료되었지만 부모 프로세스가 자식 프로세스의 종료 상태를 회수하지 않았을 경우
orphan process : 부모 프로세스가 자식 프로세스보다 먼저 종료
UNIX-like OS에서는
- 새로운 프로세스가 fork() 시스템 콜로 생성된다
- 자녀프로세스는 부모 프로세스의 address space의 copy로 구성된다
- 두 포르세스들은 계속해서 실행된다. (fork() 시스템 콜 이후에 지시들을)
- 차이점 : fork()의 리턴코드는 자녀 프로세스에게 zero이다. 자녀 프로세스의 nonzero pid는 부모 프로세스에게 반환된다.
fork() 시스템 콜 이후에 부모는 계속해서 실행되거나, 자녀들이 실행될때 아무것도 할게 없다면, 자녀의 종료까지 ready queue 에서 자기자신을 빼두기 위해 wait()시스템 콜을 발생시킬 수 있다. (wait queue 로 이동해 자녀 프로세스의 interuppt를 기다린다는 것)
4. Interprocess Communication (IPC)
동시에(concurrently) 실행되는 프로세스들의 종류 :
1. independent processes : 다른 모든 프로세스들과 공유하는 데이터가 없다.
2. cooperating processes : 다른 프로세스들에의해 영향 받거나 영향을 줄 수 있다. / 다른 프로세스들과 데이터를 공유하는 모든 프로세스
IPC : Inter-Process Communication
Cooperating process들은 IPC 메커니즘을 필요로 한다. 이는 상호간의 데이터를 데이터를 주고받는 교환을 가능하게 한다.
IPC의 두 기초모델들
1. Shared Memory :
2. Message passing :
5. IPC in Shared-Memory Systems
Producer-Consumer Problem :
- cooperating process 들의 개념을 서술하기위한 일반적인 패러다임
- 생산자는 소비자에의해 소비될 정보를 생산한다.
예를들어
- 컴파일러가 어셈블리 코드를 생산하고, 어셈블러가 그것을 소비한다
- 웹 서버가 HTML파일을 생산하고, 브라우저가 소비한다.
Shared memory를 이용한 해법
- 생산자와 소비자는 concurrently하게 실행되도록 만들어준다.
- buffer을 사용해 생산자가 버퍼를 채우고, 소비자는 버퍼를 비운다.
shared memory는 생산자와 소비자 프로세스들에의해 공유되는 메모리 영역이다.
6. IPC in Message Passing Systems
Shared memory방식의 문제점
- 이 프로세스들이 메모리 영역을 공유하는 것이 필수적인데, 공유 메모리를 다루고 접근하기위한 코드가 어플리케이션 프로그래머에 의해 명시적으로 작성되어야 한다.
Message-Passing : OS가 Cooperating process들에게 message-passing facility를 통한 상호간의 소통수단을 제공해준다.
message-passing facility의 두가지 기능:
1. send (messsage)
2. receive (message)
Communication Links : P와 Q라는 두개의 프로세스가 소통하기를 원한다면, 그들은 서로 SEND와 RECEIVE메세지를 주고 받아야 한다.
이 Communication link는 다양한 방법으로 적용될 수 있다.
1. direct / indirect communication
2. synchronous / asynchronous communication
3. automatic / explicit buffering
direct communicaiton :
- 소통하기 원하는 각각의 프로세스는 명시적으로 communication의 수신자와 송신자를 명명해야한다.
-
'Study > 운영체제' 카테고리의 다른 글
운영체제 1,2 운영체제의 개념과 구조 (0) | 2023.11.23 |
---|