Process 개념

Process : 현재 실행중인 프로그램

프로그램은 반드시 연속적으로 일어나야함 -> jump, 분기 instruction 때문에 바뀔 수 있음, default는 seqeuntial

Process는 5가지 별도의 공간을 가짐

text section : program code 부분

Stack : function call 과 context switch

   function call : parameter 저장, return address, local 변수 등

   context switch : 레지스터 값을 저장 (PC 포함) , stack pointer 저장

data section : static, global 변수 저장 -> 실행상황과 관계없이 어디서든 접근 가능한 Data

heap section(free memory pool) : 동적 할당을 위해 (malloc) -> 동적 할당 메모리 관리

 

stack으로 관리하는 이유?

 

Process in Memory (메모리 상에서 Process 모습) : Address Space(프로세스의 주소 공간)

연속된 주소공간으로 logical 하게 연속, physically 연속은 x

text,data -> 고정 영역

stack 과 heap -> 가변 영역이지만 만날 가능성은 없음

 

Process State

프로세스 실행 과정에서 상태 변이가 일어난다.

new : process가 생성된 상태 (아직 cpu scheduling 대상은 아님) -> 실시간 system에서는 각 작업의 deadline이 정해져 새로운 process가 들어오면 자원할당이 필요하고 기존 process가 deadline을 만족시키지 못할 수 있기에 바로 scheduling 대상에 포함하지 않는다. 즉 , 기존 processe들이 deadline을 맞출 수 있는지 확인 후 scheduling 대상에 포함한다. 일반적인 os에서는 바로 편입

running : instruction이 실행되는 상태 (cpu를 잡고 일하는 중)

waiting : process가 event 발생을 기다리는 상태 (주로 I/O event)

ready : process가 할당받기를 기다리는 상태 (언제든 cpu를 할당받을 수 있는 상태)

terminated : process가 실행을 끝낸 상태( 마지막 instruction 수행 끝난 상태)

 

 

Process Control Block(PCB)

:어떤 프로세스에 대한 자료구조

kernel data structure

process state , program counter, cpu register, cpu scheduling information, memory-management information, accounting information, i/o status information

 

CPU Switch from Process to Process

:Multiprogramming, Multitasking을 위해 cpu를 잡고있는 process를 상태를 포장해서 저장후 다른 process 실행

Process Scheduling Queues

 

Job queue : process의 pointer를 갖고 있음(PCB의 pointer들)

Redy queue : CPU를 기다리는 process들이 모여있는 queue

Device queues : I/O Device를 기다리는 process들이 모여있는 queue

 

-> 프로세스의 상태가 변하면 queue에서 queue로의 이동이 일어남

 

Ready Queue and Various I/O Device Queues

1.CPU를 어떤 프로세스에게 줄지 결정

2. new -> ready 상태 변경을 결정

 

Schedulers

Long-term scheduler( or job schedular)

:new 에서 ready로 대상을 결정하는 schedular

-빈번하지 않게 발생하며 느리다.(seconds,minutes)

-degree of multiprogramming(현재 cpu를 이용하여 조금씩 수행중인 process 개수)를 control

 

Short-term scheduler( or CPU scedular)

:Ready 인 상태의 프로세스에게 어떤 scedular를 줄 것인지 결정

-매우 자주 발생하며 빨라야 한다. (mileseconds)

 

Addtion of Medium-term scheduling

 

Process는 두가지로 구분 -> process는 scheduling 입장에서 매우 중요한 정보를 가짐, 효율성을 위해 프로세스를 구분하여 관리한다.

I/O -bound process - 연산보다는 I/O에 대부분 시간 사용 (editor, hwp, massenger...), CPU를 짧게 여러번 사용

CPU-bound process - 연산에 대부분의 시간 사용, CPU를 길게 적게 사용

 

Context Switch

:Multiprogramming을 위해 생기는 것

CPU가 다른 process로 바뀔때 system은 이전 프로세서의 상태를 저장하고 새로운 저장된 상태의 프로세스를 불러온다.

store : regiser -> pcb

reload : pcb -> register

 

Context Switch Time 은 Overhead

-> 부가적인 overhead 발생 

switching 시 system은 특별한 일을 수행x

하드웨어의 지원을 받음

cache flushing - cache miss over head - context switch 가 발생하면 기존 cache 내용이 필요없어서 cache를 비워버림

 

Provcess Creation

-Process를 만드는 주체는 다른 어떤 Process이다(shell process).

부모 프로세스는 자식 프로세스를 생성한다.  -> tree 구조

프로세스는 pid(process identifier)로 식별하고 관리한다.

일반적으로 부모프로세스와 자식 프로세스는 내용적인 관계가 없다. 하지만 자식프로세스가 죽었을 때 부모 프로세스가 return 값을 받아줘야 한다.

resource를 공유하는 밀접한 관계도 있음

Execution : 부모와 자식 프로세스는 동시에 실행된다. 부모는 자식프로세스가 종료될때까지 기다린다.

Address spcae : 자식이 부모 값을 복제(default값) -> fork 하자마자의 상태는 부모와 동일

UNIX example

-fork() systemcall은 새로운 프로세스를 생성한다.

-exec() systemcall은 fork 호출 이후 프로세스의 메모리를 새로운 프로그램으로 대체한다. -> exec()가 호출되지 않으면 부모와 동일한 상태

 

Starting point of the child process -> 자식 프로세스가 fork() 된 시점을 정확히 알아야 함

fork() system call 이후  return 값을 받기 전에는 부모와 동일한 상태

자식 프로세스의 return  value는 0이며 부모 프로세스는 자식프로세스의 pid를 return value로 갖는다.

else if, else 부분에서 부모,자식을 분기한다.

Process Termination

process 실행이 마지막 statement실행 후 os에 프로세스 삭제 요청을 함 -> exit() 

wait을 통해 자식 프로세스의 output이 부모 프로세스에 전달

프로세스 resources 는 os에 의해 deallocated

부모 프로세스가 자식프로세스의 실행을 중단시킴-> abort

- 자식 프로세스의 자원할당이 초과하는 경우

-자식 프로세스의 일이 필요없는 경우

-부모가 exit 하는 경우 os는 자식프로세스가 더 이상 작동하지 않도록 함 (cascading termination)

 

Interprocess Communication

 

Single and Multithreaded Processes

왼쪽은 하나의 일반적인 process, 오른쪽은 한 process안의 여러개의 threads

Threads

:thread(lightweight process)는 CPU utilization 의 기본단위

- program counter, register set, stack space로 구성되어 있음

 

threds는 code section, data section, files 내용을 공유한다. 

 

Threads 사용의 장점

Responsiveness

- 부분적으로 blocked가 발생하거나 긴 operation이 수행되더라도 program이 계속 작동할 수 있도록 해준다.

Resource Sharing

-process를 여러개 사용한다면 address space가 독립적으로 존재하여 overhead가 크게 발생한다. 하지만 thread는 memory copy를 하지 않고 공유할 수 있다.

Economy

-프로세스를 만들고 context switch를 하는 것 보다 경제성이 뛰어나다.

Scalability(확장성)

-각 thread는 다른 프로세서에서 병렬적으로 실행될 수 있다.

 

User Tread

-> 가볍고 빠르다

사용자 수준 thread 라이브러리에서 수행되는 thread 관리 -> 응용프로그램에서 thread 를 생성하고 관리
-thread 생성, 스케줄링 및 관리
-kernel에서 지원되지 않음
-신속한 생성 및 관리
-단일 thread 커널을 사용하면 차단 시스템 호출을 수행하는 하나의 사용자 수준 thread로 인해 전체 프로세스가 차단됨
(OS는 해당 프로세스의 다른 thread의 존재를 모르기 때문에 CPU를 다른 프로세스에 할당합니다)

 

POSIX Pthreads
Mach C-threads
Solaris threads
 

Kernel Thread

-> 느리다.

커널에서 지원됨
-커널이 스레드 생성, 스케줄링, 관리를 수행함: 사용자 스레드보다 느림
-차단 thread는 전체 프로세스를 차단하지 않음
-MP 기계에서 커널은 다른 프로세서의 thread를 예약할 수 있음

-여러 Thread 간에 컨텍스트 스위칭을 해야 하므로, 성능 저하가 발생할 수 있음

 

Windows
Solaris
Tru64 UNIX
BeOS
Linux

 

Threading Issue

 

 

'Development > OS(Operating System)' 카테고리의 다른 글

Deadlock  (0) 2023.05.09
Process Synchronization(2)  (0) 2023.04.08
Computer System Overview2  (0) 2023.04.01
Process Synchronization(1)  (0) 2023.03.30
CPU Scheduling  (0) 2023.03.28

+ Recent posts