오식랜드
[운영체제] 프로세스 (process) 본문
반응형
프로그램
- 저장장치(하드웨어)에 저장되어있는 정적인 상태
프로세스
- 메모리에 올라온 동적인 상태
- 실행중인 프로그램
- 메모리에 적재되어 운영체제의 제어를 받는 상태
- 프로세스가 사용하고 있는 메모리 영역이 존재함을 의미 (자신의 주소공간이 존재)
- 운영체제로부터 프로세스 제어 블록을 얻는다는 뜻
- 하드웨어에서 메모리로 옮기기와 같은 기능을 운영체제가 해줌
- 클릭 시 프로그램이 메모리로 적재 (프로세스)가 됨
- 프로그램 크기 계산
- 크기만큼 메모리 공간 확보 등의 일을 함
프로세스의구조
- 코드영역
- 읽기 전용
- 프로그램의 본문이 기술된 곳
- 프로그래머가 작성한 코드가 있음
- CPU에서는 읽기만 가능
- 데이터 영역
- CPU가 읽기, 쓰기 가능
- 코드가 실행될 떄 쓰는 변수나 파일 등의 데이터 집합
- 스택 영역
- 운영체제가 프로세스를 실행하기 위해 데이터를 쌓는 곳
- 운영체제 관할이라 우리는 관여하지 못함
- heap: stack 영역 상단에서 부터 쌓임. 무한루프같은 작업시 heap overflow 발생
- stack : stack영역 하단에서부터 쌓임
프로세스 제어 블럭 (PCB : Process Control Block)
- 운영체제가 프로세스를 관리하는 자료구조
- 프로그램 종료시 PCB 폐기
- 갖고있는 정보
- 프로세스 구분자 (Porcess ID, PID)
- 메모리 위치 정보
- 각종 중간 값
프로세스의 상태
- 활성 상태 5가지
- 생성 (creation)
- 프로세스가 메모리에 올라와 실행 준비 완료한 상태 (PCB 생성)
- 준비 상태 (ready status)
- 프로세스가 CPU를 얻을 때까지 기다리는 상태
- 실행 상태 (running status)
- CPU를 얻어 실제 작업을 수행중인 상태
- 대기 상태 (blocking status)
- 프로세스가 입출력을 하는 동안 대기하는 장소
- 그동안 CPU는 다른 프로그램을 실행
- 완료 (terminate)
- 주어진 시간 동안 작업이 완료된 상태 (PCB 삭제)
- 생성 (creation)
- 보류 상태 2가지
- 보류 대기 상태 Suspend Status
- block → suspend : 보류
- suspend → block : 재시작
- 프로세스가 메모리에서 잠시 쫒겨난 상태
- 메모리가 꽉 차서 하드디스크의 가상메모리로 옮겨짐
- 보류 준비 상태
- 활성 상태로 가기 위한 준비 상태 (ready로 갈 준비)
- 보류 대기 상태 Suspend Status
- 휴식 상태
- 프로세스가 일시정지 된 상태
프로세스의 4가지 전이
- dispatch : 준비 → 실행
- 준비상태의 프로세스 중 실행상태로 바꾸는 것
- time out : 실행 → 준비
- 인터럽트 : CPU가 중지 명령을 받은 것
- 주어진 타임슬라이스 내에 작업을 끝내지 못해 다시 준비상태로 돌아가는 것
- blocking : 실행 → 대기
- 실행중이던 프로세스가 입출력 요청 시 대기상태로 빠지게 됨
- 그동안 CPU는 다른 작업을 실행함
- wake up (unblocking) : 대기 → 준비
- 입출력이 완료 된 프로세스는 다시 CPU를 얻기 위해 준비상태로 들어감
프로세스 생성과 복사
fork()
- 실행중인 프로세스를 복사
- Ctrl+N
- 기존 프로세스는 부모, 새로생긴 프로세스는 자식이 된다.
- 프로세스 생성 속도가 빠르다
- 자원 상속 가능 (ex. 크롬 복사 시 즐겨찾기 그대로)
- PCB 중 변경되는 내용
- 프로세스 구분자 PID (같으면 안됨)
- 메모리 주소 (같으면 안됨. 각자의 메모리가 있음)
- 부모 프로세스 구분자 (PPID)
- 자식 프로세스 구분자 (CPID)
exec()
- 기존의 프로세스를 재사용
- 프로세스는 그대로 둔 채 내용만 바꿈
- PID가 그대로
- 코드 영역의 내용을 새로운 내용으로 바꿈
- 테이터영역은 새 변수로 채워짐
- 스택 영역은 리셋
- 보통 fork()와 함께 사용이 됨
프로세스 계층 구조
- 여러 작업을 동시에 처리 가능
- 프로세스 재사용이 용이
- 자원 회수가 쉬움
고아 프로세스
- 부모 프로세스가 먼저 종료되어 돌아갈 곳이 없는 프로세스
좀비 프로세스
- 자식 프로세스가 종료되었는데, 부모 프로세스가 뒤처리를 하지 않아 발생하는 프로세스
- exit() 또는 return()을 통해 자식프로세스 작업이 끝났음을 부모에게 알려야 함
반응형
'dev-log > cs' 카테고리의 다른 글
[운영체제] 우선순위 (0) | 2023.09.27 |
---|---|
[운영체제] 스레드 (thread) (0) | 2023.09.27 |
[운영체제] 무어의 법칙 / 암달의 법칙 (0) | 2023.09.27 |
[운영체제] 멀티코어 / 멀티스레드 시스템 (0) | 2023.09.27 |
[운영체제] 저장장치 / 인터럽트(interupt) (0) | 2023.09.27 |
Comments