Process
현재 실행중인 프로그램을 프로세스라고 하며, 운영체제에서 작업의 단위를 프로세스라 한다.
- text : 컴파일된 소스 코드가 저장되는 영역
- data : 전역 변수나 초기화된 데이터가 저장되는 영역
- stack : 함수의 매개변수, 복귀 주소, 로컬 변수 등의 임시 데이터가 저장되는 영역
- heap : 프로세스 실행 중에 동적으로 할당되는 메모리가 저장되는 영역
프로세스의 생명주기
- New : 프로세스가 생성되어 메인메모리에 올라온 상태
- Running : CPU가 실제로 프로세스를 수행하고 있는 상태
- Waiting : 프로세스 도중에 I/O 작업을 수행하는 상태로 CPU가 I/O작업의 완료를 기다리는 시기
- Ready : 변수 초기화 등 기초 준비작업을 모두 끝나고 실행을 할 수 있는 상태
- Terminated : 최종적으로 프로세스가 종료된 상태, 사용하던 메모리 영역 해제
PCB(Process Control Block)
PCB는 각 프로세스에 대한 다양한 정보를 담고 있는 데이터 자료구조
- 프로세스 식별자(Process ID, PID) : 프로세스 식별번호
- 프로세스 상태 : new, ready, running, waiting, terminated 등의 상태를 저장
- 프로그램 카운터 : 프로세스가 다음에 실행할 명령어의 주소
- CPU 레지스터
- CPU 스케쥴링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
- 메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함
- 입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
- 어카운팅 정보 : 사용된 CPU 시간, 시간제한, 계정번호 등
Thread
프로세스의 실행단위로, 하나의 프로세스 안에 여러개의 쓰레드를 실행시킬 수 있다.
Multi-programming
동시에 하나 이상의 프로세스를 실행하는 것 ⇒ Concurrency
Time sharing
멀티 태스킹이라고도 하며, CPU가 스케줄링을 통해 작업들을 빠르게 switching하면서 마치 동시에 작업들이 수행되는 것처럼 느껴지게 하는 것이다.
Process Scheduling
Scheduling Queues
- 프로세스가 시스템에 들어오면 잡 큐(Job queue)에 들어간다. 잡 큐는 시스템의 모든 프로세스로 구성되어있다.
- 메인 메모리에서 실행을 기다리는 ready 상태의 프로세스들은 레디 큐(Ready queue)에 쌓인다.
- 특정한 event가 발생하기를 기다리고 있는 프로세스들은 웨이트 큐(Wait queue)에 들어간다.
- 입출력 장치를 기다리는 프로세스들은 디바이스 큐(Device queue)로 들어간다.
- 이러한 큐들은 PCB의 Linked List들로 이루어져있다.
Context switch
현재 진행하고 있는 task의 상태를 저장하고 다음 진행할 task의 상태 값을 읽어 적용하는 과정을 의미함
- Task의 대부분 정보는 register에 저장되고 PCB로 관리되고 있음
- 현재 실행하고 있는 Task의 PCB 정보를 저장하고
- 다음 실행할 Task의 PCB정보를 읽어 register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행할 수 있음
Fork
fork() 라는 시스템 콜을 호출하여 프로세스를 생성할 수 있다.
parent → child 트리형태로 프로세스가 생성된다.
- Zombie process : 자식 프로세스가 부모 프로세스보다 먼저 죽는 경우에, 부모 프로세스가 wait함수를 호출하지 않아 자식 프로세스가 완전히 소멸되지 못하고 남아있게 되는 경우
- Orphan process : 부모프로세스가 자식 프로세스보다 일찍 종료됨.
프로세스의 실행
- 부모 프로세스와 자식 프로세스가 동시에 실행된다. (멀티프로세싱환경)
- 부모 프로세스는 자식 프로세스들이 종료될 때까지 기다린다.(→ waiting queue)
프로세스의 주소 공간
- 자식 프로세스가 부모 프로세스의 주소 공간을 복사한다.
- 자식 프로세스가 별도의 프로그램을 적재한다.
fork
- 자식 프로세스는 0을 리턴
- 부모 프로세스는 자식 프로세스의 식별자(pid)를 리턴
exec()/ execlp()
- 프로세스를 새로운 프로그램을 실행하는 프로세스로 대체하는 시스템 콜 함수
- 현제 프로세스의 프로그램 코드를 새로운 프로그램 코드로 바꿔준다.
- 따라서 반환 값은 없다.
728x90
'📓STUDY > OS' 카테고리의 다른 글
[OS/운영체제/공룡책 붓츠부스] 프로세스 간 통신 (0) | 2024.03.20 |
---|---|
[OS/운영체제/공룡책 붓츠부스] 1. 운영체제란? (0) | 2023.04.25 |