728x90
728x90
Process(프로세스)
- 실행중에 있는 프로그램(Program)을 의미한다.
- 주 기억장치에 올라가 있는 프로그램이다.
- 작업(Job) 또는 태스크(Task)라고도 한다.
Five-State Process Model
- New(생성) : 프로세스가 막 생성된 상태이다.
- Ready Queue에 올라가면 ready상태가 된다.
- Ready(준비) : 프로세스가 CPU로부터 메모리 공간을 할당받길 기다리는 상태이다.
- 이 때 프로세스 스케줄러에 의해 프로세스가 할당을 받게 되면 running 상태가 된다.
- 이것을 dispatch 라고 한다.
- Running(실행) : 명령어들이 실행되는 상태이다.
- 이 때 Interrupt(간섭)/Timeout 이 발생하면 Ready 상태로 변한다.
- 실행을 끝마치면 Exit(종료) 상태로 변한다.
- I/O(입출력)이나 event가 발생하면 Blocked 상태로 변한다.
- Blocked(대기) : 특정 event가 발생하길 기다리는 상태이다.
- 이 때 I/O 나 특정 event가 완료되면 Ready상태로 변한다.
- Exit(종료) : 프로세스가 실행을 끝마친 상태이다.
Seven-State Process Model
Five-State Process Model 에 2개의 Suspend State가 추가되었다.
- Ready/Suspend(지연준비) : I/O 작업이나 요청한 작업이 끝났지만 메모리에 자리가 없어 여전히 하드디스크에 있는 상태이다.
- Blocked/Suspend(지연대기) : 요청한 작업이 끝나지 않았고, 메모리에 있던 프로세스들이 Swapping으로 인해 하드디스크로 내려간 상태이다.
프로세스 메모리 구조
PCB(Process Control Block, 프로세스 제어 블록)
- 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체이다.
- 프로세스 상태 관리와 문맥 교환(Context Switching)을 위해 필요하다.
- PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지된다.
- 보호된 메모리 영역에 존재(일부 운영체제에서는 커널 스택의 처음에 위치)
- 보호된 메모리 영역에 존재(일부 운영체제에서는 커널 스택의 처음에 위치)
PCB 구성
부르는 명칭에 차이가 있다. 주요 항목은 동일하니 신경쓰지 않아도 될 것 같다.
- Process Id : 프로세스의 고유 번호
- Process State : 프로세스의 현재 상태
- Program Counter(PC) : 프로그램 카운터, 다음 실행될 명령의 포인터
- CPU registers : CPU 레지스터 정보
- CPU scheduling information : CPU 스케줄링 정보
- Memory-management information : 할당된 자원 정보
- Accounting information : CPU 사용시간 등
- I/O status information : 입출력 상태 정보
Thread(스레드)
프로세스 내에 존재하는 CPU 스케줄링의 기본 단위를 말한다.
- 프로세스는 1개 이상의 스레드를 보유한다.
- 동일 프로세스 내의 스레드는 자원을 공유한다.(스택 공간은 따로 관리한다)
- PCB를 가리키는 포인터를 가진다.
- Thread Control Block(TCB, 스레드 제어 블록) 이 따로 존재한다.
TCB 구성
- Thread Identifier
- 스레드 식별자
- Unique id (tID) is assigned to every new thread
- Stack pointer
- Points to thread's stack in the process
- 하나의 스택의 크기는 8KB ~ 64KB 정도 된다.
- Program counter
- 현재 실행 중인 instruction의 주소
- State of the thread (running, ready, waiting, start, done) : 스레드의 상태
- Thread's register values
- CPU의 레지스터 값들
- Pointer to the Process control block (PCB) of the process that the thread lives on
Linux 에서의 Process
리눅스 환경에서는 프로세스와 스레드를 구별하지 않는다.
부모 프로세스(PPID)
- 선행 프로세스라고도 한다.
- fork() 호출을 통해 자식 프로세스를 생성할 수 있다.
- 여러 자식 프로세스를 실행하여 다수의 프로세스를 동시에 처리할 수 있다.
자식 프로세스
- 부모 프로세스의 복사본이다.
- 부모 프로세스와 메모리를 공유하지 않는다.
init 프로세스
- 리눅스 시스템 부팅 시 가장 먼저 실행되는 프로세스다.
- 파일 시스템을 관리한다.
좀비 프로세스
- 자식 프로세스가 부모 프로세스보다 먼저 종료되는 경우를 말합니다.
- 실행이 종료 되었지만, 삭제되지 않은 프로세스를 의미한다.
- 모든 프로세스는 종료 시 자원을 반납하며 좀비 프로세스가 된다.
- 부모 프로세스가 종료 상태를 회수하기 위해 커널이 자식 프로세스의 최소한의 정보를 남겨둔다.
- 부모 프로세스는 좀비 프로세스의 생성을 방지하기 위해 wait()함수를 호출하여 상태를 회수해야 한다.
- 부모 프로세스가 wait()를 호출하면 좀비 프로세스가 PID, 종료 상태를 반납한다.
- 처리하지 않으면 PID의 낭비가 발생할 수 있다.
고아 프로세스
- 부모 프로세스가 자식 프로세스보다 먼저 종료되는 경우를 말합니다.
- 부모 프로세스가 먼저 종료되면 init 프로세스가 자식 프로세스의 부모가 된다.
- init 프로세스는 자식 프로세스가 종료될 때까지 기다린 후 wait()함수를 호출하고
고아 프로세스의 종료 상태를 회수하여 좀비 프로세스가 되는 것을 방지한다.
데몬 프로세스
- 데몬(daemon) 이란 서비스의 요청에 대해 응답하기 위해
오랫동안 실행중인 백그라운드(background) 프로세스다. - 유닉스(리눅스 포함) 운영체제에서 이름이 "d"로 끝나는 프로세스들이 대표적인데
inetd, httpd, nfsd, sshd, named와 lpd 등이 있다. - 시스템이 시작될 때 생성되어 백그라운드에서 실행된다.
- 메모리에 상주하면서 특정 요청을 위해 대기한다.
- 시스템이 종료될 때 종료된다.
참고
728x90
728x90
'Computer Science > Operating System' 카테고리의 다른 글
Context Switching(컨텍스트 스위칭) (0) | 2023.03.07 |
---|---|
단기 스케줄러, 중기 스케줄러, 단기 스케줄러 (0) | 2023.03.07 |
Process Address Space(프로세스 주소 공간) (0) | 2023.03.07 |
인터럽트(Interrupt) - 내용 수정 필요 (0) | 2023.03.04 |
System Call(시스템 콜) (0) | 2023.03.03 |