1. 프로그램
1.1. 프로그램이란
- 프로그램은 실행 파일을 의미
- 주기억 장치에서 상주된 프로그램이 CPU에 의해서 처리되는 상태는 프로세스라고 함
1.2. 프로그램 실행 과정
- 사용자가 OS에게 프로그램 실행 요청
- 운영체제가 프로그램의 정보를 메모리(주기억장치_RAM)에 로드
- CPU가 프로그램 코드를 관리&명령 실행
2. 프로세스
2.1. 프로세스란(개념, PID, PPID, init, 관련 명령어)
- 메모리에서 CPU를 할당 받아 실행 중인 프로그램
- 각각의 프로세스마다 고유 번호의 프로세스 ID(PID)를 하나씩 증가하면서 부여
- PPID (부모 프로세스)
- 선행 프로세스라고도 하며, 자식 프로세스 생성 가능
- fork() 호출을 통해 자식 프로세스 생성
- 부모 프로세스는 여러 개의 자식 프로세스를 실행하여 다수의 작은 작업들을 동시에 처리 - 자식 프로세스
- 부모 프로세스가 처리 중인 파일 등을 공유
- 부모 프로세스에서 fort()하여 생긴 프로세스
- 프로그램에서는 부모 프로세스의 복사로 부모와 교신하면서 프로세스 진행 - init
- 부팅되면서 가장 먼저 실행되는 프로세스는 init, init의 PID는 1
- init 프로세스는 파일 시스템의 구조 검사
- 파일 시스템의 마운트하고 서버 데몬을 실행하며, 사용자 로그인을 기다리고 사용자를 위한 셸을 실행하는 역할
- /etc/initab : 처음 수행해야할 작업들을 설정하는 파일, 시스템의 상태에 따라 해당하는 런레벨에서 init 프로세스가 수행해야할 파일을 지정
2.2 프로세스 관련 명령어
- ps 명령어 : 현재 작동하는 프로세스 목록, 프로세스의 현재 상태 출력
- kill 명령어 : 현재 작동하는 프로세스 종료
- top 명령어 : 실시간 프로세스 모니터링
2.3. 프로세스 상태
- 프로세스의 상태 종류 : 생성, 준비, 실행, 대기, 종료
- new : 프로세스가 생성된 상태
- ready : 프로세스가 생성된 후 프로세서에 할당되기를 기다리는 상태
- running : 프로세서에 할당되어 CPU를 차지하고 있는 상태
- wait : 프로세스가 특정 이벤트를 기다리는 상태 → 프로세서에 할당되어 있지만 프로세서의 클락을 낮추거나 일시적으로 멈춤으로써 에너지 소비를 줄일 수 있는 상태
- terminated : 프로세스 종료된 상태
- 프로세스의 상태 전이
- Dispatch (ready -> running)
- 여러 프로세스들 중 한 프로세스를 선정하여 CPU에 할당하는 과정
- Interrupt (running -> ready)
- 할당된 CPU 시간이 지나면 Timeout Interrupt 가 발생하여 CPU를 다른 프로세스에게 양도하고 자신은 ready 상태로 전이되는 과정
- Block (running -> waiting)
- I/O 등의 자원 요청 후 즉시 할당받을 수 없어, 할당받을 때까지 기다리기 위해 running에서 waiting 상태로 전이되는 과정
- I/O 처리는 CPU가 아닌 I/O 프로세스가 담당하기 때문에 block이 발생함
- Wakeup (waiting -> ready)
- 필요한 자원이 할당되면 프로세스는 waiting에서 ready 상태로 전이되는 과정
- Dispatch (ready -> running)
2.4. 프로세스의 구성
2.4.1. 프로세스 메모리
- 운영체제는 프로세스마다 고유의 가상 메모리 공간 제공
- 프로세스 메모리 공간은 다시 코드, 데이터, 스택, 힙 영역으로 세분화
- text section instruction(text section)
- 컴파일된 기계어가 저장되는 영역
- compile time에 크기 결정 - data section
- 사전에 선언된 데이터가 저장되는 영역
- compile time에 크기 결정
- 내부 data&bbs 영역으로 구분
• initalized data section → 초기화된 전역 변수가 저장되는 영역 (DATA)
• uninitialized data section → 초기화되지 않은 전역 변수가 저장되는 영역 (BBS) - heap
- new, delete, malloc, free 등을 호출하여 데이터를 저장 & 관리하는 영역
- runtime에 크기가 결정 - stack
- 매개변수, 지역변수, return 주소 등과 같은 데이터를 저장하는 영역
- 컴파일러에 의해 run time 도중 크기가 결정되며, 함수가 호출 & 종료되는 시점에 생성 & 제거
2.4.2. PCB (Process Control Block)
- PCB는 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는, 운영체제 커널의 자료구조
- 운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스
- 운영체제에서 프로세스는 PCB로 나타냄
- PCB는 프로세스에 대한 중요한 정보를 가지고 있는 자료 구조
- 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거됨
- 프로세스는 CPU를 점유하여 작업을 처리하다가도 상태가 전이되면, 진행하던 작업 내용들을 모두 정리하고 CPU를 반환 필요
- 진행하던 작업들을 모두 저장하지 않으면 다음에 자신의 순서가 왔을 때 어떠한 작업을 해야하는지 알 수 없는 상태에 빠짐
- 프로세스는 CPU가 처리하던 작업의 내용들을 자신의 PCB에 저장하고, 다음에 다시 CPU를 점유하여 작업을 수행해야 할 때 PCB로부터 해당 정보들을 CPU에 넘겨와서 계속해서 하던 작업을 진행할 수 있음
- PCB는 다른 프로세스들이 쉽게 접근할 수 없고, kernel 영역에 저장
- PCB 저장 정보 : process state, PID, PPID, CPU registers, program counter, CPU scheduling 정보, Memory 관리 정보, accounting 정보, I/O 상태 정보
- 참고 자료 : OS & Process, Thread (velog.io)
'IT 학습 용어' 카테고리의 다른 글
스레드(thread) (0) | 2024.03.16 |
---|---|
데몬(daemon) (0) | 2024.03.16 |
인터넷 라이브 방송은 기술 (1) | 2023.09.17 |
한글 인코딩에 대해 간단히 정리 (0) | 2022.07.23 |
넷플릭스는 어떻게 콘텐츠를 보호(포렌식 워터마킹) (0) | 2022.07.22 |