Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

요리사에서 IT개발자로

스파르타 코딩클럽(부트캠프) 3장 프로세스 생명주기와 프로세스메모리 본문

Computer Science

스파르타 코딩클럽(부트캠프) 3장 프로세스 생명주기와 프로세스메모리

H.S-Backend 2024. 3. 19. 14:37

프로그램과 프로세스

프로그램이 저장되어 있는곳 = 보조기억장치

출처 : 스파르타 코딩클럽

프로그램이 로딩되는곳 = 주 기억장치

출처 : 스파르타 코딩클럽

프로그램을 실행하는 주체 = 프로세스

출처 : 스파르타 코딩클럽

작업을 처리해주는 주체 = 쓰레드

쓰레드는 필요할 때마다 생성되며, 프로세스 상세의 스레드 수는 최근 평균 스레드 갯수 통계값

출처 : 스파르타 코딩클럽


프로세스 상태변화 복습

프로세스의 상태변화와 스케쥴링

스케쥴링 알고리즘에 따라 프로세스들은 상태변화가 일어나며 준비/수행 상태일 때 CPU를 사용

 

아래 그림에서

  • 🟠은 프로세스들의 상태를 의미하고
  • 🔜 은 스케쥴링에 따라 상태가 변화되는 동작을 의미합니다.

출처 : 스파르타 코딩클

  1. 수행 -> 대기 (Running->Waiting) : I/O요청이 발생하거나, 자식 프로세스가 종료 대기를 할 때
  2. 수행 -> 종료 (Running -> Terminate) : 프로세스를 종료시켯을때
  3. 수행 -> 준비 (Running-> Ready) : 인터럽트가 발생했을때
  4. 대기 -> 준비 (Waiting -> Ready) : I/O가 완료되었을때

여기서 1,2은 프로세스가 스스로 CPU를 반환하기에 비선점 스케쥴링이 발생되고

출처 : 스파르타 코딩클

3,4은 프로세스에서 CPU를 강제로 할당(회수)해야 하므로 선점 스케쥴링 이 발생됩니다.

출처 : 스파르타 코딩클럽


프로세스 상태 (Status)

신규 (New) 
  • 프로세스가 이제 막 메인메모리에 올라온 상태
  • 실행하는 것은 불가능
  • 수용 동작을 거쳐야 준비단계로 넘어간다

출처 : 스파르타 코딩클럽


준비 (Ready)
  • 변수 초기화 등 기초 준비작업을 모두 끝나고 실행을 할 수 있는 상태
  • 스케쥴러를 통해 발송(Dispatch) 되어야 수행상태가 된다
1.신규 프로세스가 수용
2.대기프로세스의 입출력/이벤트 완료
3.수행프로세스가 중단
4.준비상태완료

출처 : 스파르타 코딩클럽


수행(Running)
  • CPU가 실제로 프로세스를 수행하고 있는 상태
  • 선점 스케쥴링에 의해 중단되면 준비상태
  • 입출력/이벤트가 필요하면 대기상태
  • 수행이 완료되면 종료상태
준비 프로세스가 스케쥴러를 통해 발송되면 수행상태가 된다.

출처 : 스파르타 코딩클럽

 

수행 상태에서 해제되는 경우

수행 -> 준비(중단)
-CPU의 과부하가 판단되는 경우

수행 -> 대기
-I/O나 Event Wait가 있을 경우
-이후 I/o나 Event가 끝나면 Ready 상태로 복구

대기 (Watining)
  • 프로세스 도중에 I/O 작업이 필요하여 I/O 작업을 수행하는 상태
  • 이 때 CPU는 I/O를 기다리며 다른 프로세스를 수행
  • 대기상태가 끝나면 프로세스는 다시 준비상태가 되고, 잠시 후 다시 수행한다.

출처 : 스파르타 코딩클럽


종료(Terminated)
  • 최종적으로 프로세스가 종료된 상태
  • 사용하던 메모리 영역이 해제된다.

출처 : 스파르타 코딩클

시간 공유 시스템에서는 수행상태에서 할당된 시간이 종료(Expired)되면, 대기 상태를 거치지 않고 바로 준비상태로도 변할 수 있다. 중단(Inturrept)과 같이 동작

대기 큐 (Waiting Queue)

출처 :  https://gusdnd852.tistory.com/82

1. Job Queue
  • HDD 에 있던 프로그램들이 메모리에 올라올 때, 메인 메모리가 가득 찼거나 CPU가 다른 작업을 수행 중 이라면 메모리에 올라오기 전 어느정도 기다려야하는데 HDD의 프로그램들이 잠시 기다리는 곳을 Job Queue라고 한다.
2. Ready Queue
  • 메인 메모리에 프로그램이 올라왔다 하더라도 바로 CPU의 서비스를 받을 수 없다.
  • 다른 프로그램이 수행 중 이라면 기다렸다가 해당 프로그램이 I/O를 시작하거나 시공유 시스템의 경우 기존 프로세스가 시간초과되면 실행된다.
  • 이미 메모리에 올라온 프로세스들이 실행을 위해 대기하는 곳을 Ready Queue 라 한다.
3. Device Queue
  • I/O 장치 (프린터, 키보드, 마우스 등등) 을 이용하려면 기존 I/O 작업이 끝나기를 기다렸다가 밀려있던 모든 작업이 끝날 경우 I/O장치를 사용할 수 있다
  • 프린터는 프린터큐, 마우스는 마우스큐, 키보드는 키보드큐와 같이 각각 I/O장치들이 각자의 대기 큐를 가지고있는것들을 Device Queue 라 한다.
 Terminated는 대기큐가 없다
이유는 프로세스가 종료될 때 기다릴 필요없이 바로 종료된다.

스케쥴링 (Scheduling)

출처 :  https://gusdnd852.tistory.com/82

1. Job Scheduling
  • Job Queue의 프로그램들은 어떤 순서로 메모리에 올릴 것인지가 결정됨
  • 이러한 과정은 프로그램이 새로 시작될 때메인메모리가 가득찬 경우 등의 상황에만 발생함으로 어쩌다 한번(수분~수십분) 일어남
Long Term Scheduler
프로그램이 새로 시작될 경우나 메인 메모리가 가득찬 경우 등의 상황에만 발생함으로 어쩌다 한번(수분~수십분) 일어나며 긴간격으로 동작 하는것을 칭한다.
2. CPU Scheduler
  • Ready Queue의 프로세스들은 어떤 순서로 서비스 할 것인지에 대한 스케쥴러이다.
  • 모든 스케쥴링 중 CPU 스케쥴링이 가장 중요하다.
Short tern Schduler
시공유 시스템의 경우 이러한 과정은 1초에도 수십번에서 많게는 수백번도 일어나는 것을 칭한다
3. Device Scheduler
  • Device Queue의 프로세스들을 어떤 순서로 I/O 장치를 이용하게 할 것인지에 대한 스케쥴러이다.
  • 이는 Disk Scheduler, Printer Scheduler, Mouse Scheduler 등 I/O, 보조기억 장치 스케쥴러를 통들어 가리기는 말
I/O Bound Process VS CPU Bound Process
-I/O Bound Process : 대부분의 시간을 I/O 하는데 쓰는 프로세스
-CPU Bound Process : 대부분의 시간을 CPU로 연산하는데 쓰는 프로세스
-운영체제 (Job Scheduler)는 이들을 적절하게 배합하여 I/O 장치와 CPU 둘다 오래 쉬지않게해야한다.
(성능 향상 목적)

주-보조 교환(Swapping)
1. Swapping
  1. 서버와 같이 여러 사용자가 하나의 메모리를 공유할 때 한사용자가 자리를 비운 경우 돌아올 때 까지 프로세스의 메모리를 할당할 이유가 없다.
  2. 그렇기에 PCB(Process Control Block)의 CPU Time 등을 확인하여 오랫동안 동작이 없는 프로세스는 HDD로 내리고 다른프로세스를 실행하거나 기존 프로세스에 메모리를 더 할당하는 등 메모리를 더 효율적으로 활용한다.
  3. 그 후 동작없던 프로세스 사용자가 돌아와 작업을 수행한다면 다시 HDD 에서 메모리로 올린다.
  • Swap out : 메모리에서 HDD로 내리는 작업
  • Swap in : HDD 에서 메모리로 올리는 작업 
이렇게 임시메모리의 목적으로 사용되는 HDD공간을 Backing Store 혹은 Swap Device라 칭한다.

 

Midium Term Scheduler
- Swapping 역시 여러 프로세스들이 HDD로 내려가고 다시 메모리로 올라오고 하기에 어떤 순서로 프로세스들을 내리고 올릴지 결정해야한다.
- 이러한 스케쥴링 작업은 Short Term Scheduling 보다는 적게 일어나지만 Long Term Schduling 보다는 자주 일어난다
- 때문에 이러한 스케쥴링 작업(Swapping Scheduling)을 Midium Term Schduling 이라 한다.

문맥 교환 (Context Switching)

 

1. Context Switching

  • CPU 시공유 시스템의 경우 일정시간이 지나면 기존 프로세스를 준비상태로 만들고 다른 프로세스를 수행 상태로 만들어 실행한다.
  • 이렇게 실행하는 프로세스를 Switch 하는 것들을 통틀어 Context Switching 이라 한다

2. Scheduler

  • Context Switching 을 전문적으로 담당하는 스케쥴러는 위에서 배운 CPU 스케쥴러이다
  • CPU 스케쥴러는 Ready Queue에 대기중인 프로세스를 어떠한 순서로 실행시킬 것인지에 대한 스케쥴러이다.

3. Dispatcher

  • 프로세스 A의 코드 중에 100번 라인 까지 실행했고 작업 중 10개의 데이터를 레지스터에 저장한 경우, 스위치할 때 이정보들을 보존해야 A의 차례가 돌아왔을 떄에 이전에 수행하던 작업이 끊기지 않고 수행할 수 있다.
  • 이처럼 프로세스 A를 수행하다가 B로 넘어가면 그러한 정보들을 저장, 다시 A의 차례까 왔을 때 정보를 다시 꺼내어 PC, SP, Register등에 할당한다.
  • 이러한 작업을 수행하는 프로그램이 Dispatcher 라 한다.
대부분의 OS는 CPU 스케쥴링 방법 중 시공유 시스템을 사용한다.
- CPU 시간을 효율적으로 사용하기 위해서 운영체제는 CPU를 사용하지 않는 프로세스나 스레드가 있다면 다른프로세스나 스레드에게 CPU 시간을 할당한다.
- CPU 시공유 시스템을 사용함으로 여러 프로세스나 스레드가 동시에 실행되는 것처럼 보일 수 있다.
- 실제로 CPU가 매우 빠르기에 짧은 시간 동안 여러 프로세스나 스레드를 번갈아 가며 실행 할 수 있다.
- 이를 통하여 CPU가 최대한 효율적으로 사용됨으로 운영체제는 더 많은 프로세스나 스레드를 동시에 실행 할 수 있다.

 


프로세스 메모리

 

프로세스의 메모리 구조

출처 :  https://zangzangs.tistory.com/107

1.  Code 영역 
  • 실행할 프로그램의 코드가 저장된다. CPU는 이 영역에서 명령어를 하나씩 가져와 처리한다.

 

2. Data 영역
  • 전역변수와 정적변수가 저장된다
  • 이 변수들은 프로그램이 시작 될 때 할당하여 프로그램 종료 시 소멸된다.
BSS(Block Stated Symbol) 영역
- BSS 영역에는 초기화 되지 않은 전역변수가 저장된다.
- 초기화 된 전역변수는 Data 영역에 저장되어 비휘발성 메모리인 ROM 에 저장되는 데 이 부분은 비용이 많이 들어 RAM에 저장될 것 인지 ROM에 저장될것은 구분하기위해 영역을 구분해 사용한다.
3. Stack 영역
  • 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등) 를 임시로 저장하는 공간
  • 이 영역은 함수 호출시 기록하고, 함수의 수행이 완료되면 사라진다.
  • 매커니즘은 자료구조(Stack) 에서 배운 LIFO(Last in First Out) 방법으로 저장/출력 한다.
  • 컴파일 시 Stack 영역의 크기가 결정되기 떄문에 무한정 할당 할 수 없다.
  • 따라 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리 초과할 정도로 많이 가지고 있다면 Stack over Flow가 발생한다.
Code, Data, Stack 영역들은 컴파일 할 때 Data, Stack 영역의 크기를 계산하여 메모리 영역을 결정한다.
4.Heap 영역
  • 동적 데이터 영역이다.
  • 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다. 따라서, 프로그램 동작시 (런타임)에 크기가 결정
  • ex) Stack에서 Pointer 변수를 할당 -> Pointer 가 가리키는 Heap 영역의 임이의 공간부터 원하는 크기만큼 할당하여 사용
  • Heap 영역은 런타임에 결정된다. 자바에서는 객체가 Heap 영역에 생성되고 GC에 의해 정리됨
  • GC란 Garbage Collector의 약자, 안쓰는 Heap 영역을 치우는 청소부

커널 프로세스의 메모리

커널(Kernel)
  • 커널은 대부분의 운영체제(OS)의 주요 구성요소이며 컴퓨터 하드웨어와 프로세스를 이어주는 핵심 인터페이스. 이 두가지를 효과적으로 통신한다.
  • 커널은 운영체제가 아니라, 운영체제의 주요 구성요소이다.
  • 커널은 메모리 관리, 프로세스 관리, 하드웨어와 프로세스 사이에서 명령을 즉시 실행 할 수 있는(인터프리터) 역할을 수행하거나 시스템의 호출이나 보안등의 기능을 수행한다.
  • 대부분의 OS에서 커널은 하나의 프로세스가 아니라 컴퓨터 하드웨어와 프로세스를 이어주는 인터페이스이다.
  • OS에서 응용프로그램 조회하여 강제 종료 할 수 있는 기능도 커널 프로세스의 역할

출처 : 스파르타 코딩클럽


Code 영역
  • 시스템 콜, 중단(인터럽트) 처리 코드
  • CPU, 메모리 등 차원 관리를 위한 코드
  • 편리한 인터페이스 제공을 위한 코드
Data 영역
  • CPU, Memory 등 하드웨어 자원을 관리하기 위한 자료구조가 저장된다.
  • PCB(Process Controll Block)자료구조가 저장된다
  • 현재 수행 중인 프로세스의 상태, CPU 사용 정보 등을 유지하기 위한 자료구조이다
  • 프로세스 제어 블록이란 특정한 프로세스를 관리할 필요가 있는 정보들을 포함하는 운영체제 커널의 자료구조.
  • PCB는 각 프로세스에 대한 다양한 정보를 담고 있는 데이터, 사람으로 따지면 주민등록증.
  • 각 프로세스의 PCB는 OS 내부의 Process Management 부서에서 관리, PC Register, MMU 정보 ,Process 의 상태, CPU Time, PID(Process ID)등 많은 정보들이 포함되어 구조체와 같이 구성됨
  • 운영체제가 프로세스에 대한 정보를 담고있는 구조체
  • PCB는 중요한 정보들이 담겨 있기에 운영체제 -> 커널 내부에 담겨진다.
PCB는 해당 프로세스의 실행 정보, 상태 정보를 저장하는 자료구조로 커널 프로세스에 존재한다.
Stack 영역 
  • 각 Process 의 커널 스택을 저장
  • 프로세스는 함수호출시 자신의 복귀주소를 저장하지만 커널은 커널 내의 주소가 된다
  • 각각의 프로세스마다 별도의 스택을 두어 관리한다.
커널은 힙메모리가 없다.
커널은 운영체제(리눅스)에서 동적메모리 할당을 위해 필요한 기능들을 커널이 제공하는데 운영제제는 커널에서 제공하는 기능을 사용하여 메모리 풀 (Memory Pool)을 관리한다.

정리

프로세스 : 메모리에 올라온 프로그램
프로세스 생명주기 : 신규 - 준비 - 수행 - 대기 - 종료
PCB : 프로세스의 실행 정보와 상태 정보를 저장하는 자료구조 (PID, PC, Register, MMU 등)
대기 큐(Queue) : Job, Ready, Device Queue 등
Scheduler : Job, CPU, Device Schduler 등
Swapping : 사용하지 않는 프로세스는 HDD로 내리고 사용하면 메모리로 올리는 작업
Context Switching : Running 프로세스를 Ready로 만들고 다른 프로세스로 전환
Dispatcher : 컨텍스트 스위칭 할 때 필요한 정보(PCB를 저장하고 꺼내는 프로그램)
CPU 시간 공유 시스템 : OS에서 프로세스가 시간단위로 나뉘어 CPU를 사용할 수 있도록 관리해주는 시스템
프로세스 메모리 공간 : 프로세스 주소 공간은 Code, Data, Stack, Heap 으로 구성된다.
커널 : 대부분의 운영체제(OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 이어주는 핵심 인터페이스
PCB : 프로세스의 실행 정보와 상태 정보를 저장하는 자료구주로 커널 프로세스에 존재한다.

 

반응형