더보기
- [운영체제] 1강. 컴퓨터 통신망의 소개
- [운영체제] 2강. 프로세스와 스레드
- [운영체제] 3강. 프로세스 스케줄링
- [운영체제] 3강. 프로세스 스케줄링
- [운영체제] 4강. 병행 프로세스 I
- [운영체제] 5강. 병행 프로세스 II
- [운영체제] 6강. 교착상태 I
- [운영체제] 7강. 교착상태 II
- [운영체제] 8강. 메모리 관리
- [운영체제] 9강. 가상 메모리
- [운영체제] 10강. 페이지 교체 알고리즘
- [운영체제] 11강. 장치관리
- [운영체제] 12강. 저장장치 및 파일 관리
- [운영체제] 13강. 분산 운영체제
- [운영체제] 14강. 운영체제 보안
- [운영체제] 15강. 운영체제 사례
프로세스(process)
실행 중인 프로그램
프로그램: 동작을 하지 않는 정적·수동적 개체
프로세스: 동작을 하는 능동적인 개체
운영체제로부터 자원을 할당 받아 동작
자원: CPU, 메모리, 입출력장치, 파일 등
동작: CPU가 프로세스의 명령을 실행
- 운영체제(프로세스 관리자)의 작업
- 프로세스 생성 및 삭제
- CPU 할당을 위한 스케줄 결정
- 프로세스 상태를 관리하며 상태 전이 처리
프로세스의 구성
시스템 메모리 구조
프로그램 실행에 직접적으로 필요한 코드와 데이터
- 코드 영역 (프로그램 자체)
- 정적 데이터 영역 (프로그램 실행에 필요한 데이터)
- 정적 데이터 영역 (전역변수, 정적변수, 상수)
- 스택 영역 (지역변수, 매개변수, 서브프로그램 호출상태 등)
- 힙 영역 (사용자 동적할당 값)
프로세스 제어 블록 (PCB, Process Control Block)
운영체제가 프로세스를 관리하기 위해 필요한 각 프로세스의 정보
여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용
- 프로세스 번호(PID)
- 프로세스 상태
- 프로그램 카운터(PC) (실행중인 명령어의 다음 명령어 위치값, 제어 흐름용)
- 레지스터 (현재상태의 레지스터 값을 PCB에 저장 후 CPU 재할당 시 복구)
- 메모리 관리 정보
- 프로세스 우선순위
- 회계 정보 ..
프로세스 상태 관리
프로세스 상태
- 생성 처음 작업이 시스템에 주어진 상태
- 준비 실행준비가 되어 CPU할당을 기다리는 상태 (Waitqueue)
- 대기 프로세스가 I/O작업이 끝날 때까지 또는 특정 자원을 할당받을 때까지 보류되는 상태
- 실행 프로세스가 처리되는 상태
- 종료 프로세스가 더이상 실행되지 않도록 끝난 상태
프로세스 상태 변화
- 생성 → 준비
- 준비 → 실행 디스패치 (특정 프로세스가 CPU할당받는 과정)
- 실행 → 준비 할당시간 만료
- 실행 → 대기 이벤트 대기(입출력 등 CPU 쓸 수 없다면)
- 대기 → 준비 재개조건 만족
- 종료 (실행완료, 치명적인 오류, 부모프로세스종료)
부모 프로세스와 자식 프로세스
프로세스 생성 방법
- 사용자가 프로그램 직접 실행
- 한 프로세스가 다른 프로세스 생성 ✅
- 프로세스 생성(시스템 호출) 이용
- 부모 프로세스 : 시스템 호출을 하는 프로세스
- 자식 프로세스 : 시스템 호출을 통해 새로 생성된 프로세스
프로세스 종료 방법
- 프로세스가 모든 처리를 완료 (정상적 종료)
- 부모 프로세스에 의해 자식 프로세스 강제 종료
- 프로세스 종료(시스템 호출) 이용
- 자식 프로세스 생성시 얻은 자식 PID 이용
- 부모 프로세스가 종료되는 경우 운영체제가 자식 프로세스 종료
프로세스 생성 시스템 호출
UNIX, Linux : fork()
자식 프로세스는 부모 프로세스의 복제본, PID 상이
- 부모 프로세스 : PID = 10, pid = fork(); // 25
- 자식 프로세스 : PID = 25, pid = fork(); // 0
UNIX, Linux : exec()
자식 프로세스는 부모 프로세스와 다른 프로그램 실행, PID 동일
- 자식 프로세스 : PID = 25, pid = fork(); if(pid == 0){ exec(prg2); }
- 자식 프로세스 : PID = 25, ~~~~;
Windows : CreateProcess()
자식 프로세스는 새로운 프로그램으로 생성
- 부모 프로세스 : PID = 10, CreateProcess(prg2, ,,,, , &pid);
- 자식 프로세스 : PID = 25, ~~~~~;
스레드(thread)
프로세스 내에서 다중처리를 위해 제안된 개념
스레드와 프로세스
- 전통적인 프로세스
- 하나의 프로그램을 실행하기 위한 기본적인 단위
- 자원 소유의 단위(하나의 메모리 구조)
디스패칭의 단위 (하나의 제어흐름, 하나의 PC)- 프로세스 내에서 다중처리 불가능
- 스레드
- 하나의 프로그램을 실행하기 위한 기본적인 단위
- 디스패칭의 단위 (여러 제어흐름, 여러 PC)
- 하나의 프로세스 내에 하나 이상의 스레드 존재 가능
- 스레드는 실행에 필요한 최소한의 정보만 가짐
- PC를 포함한 레지스터 값
- 상태정보
- 스택 영역
- 나머지 정보는 프로세스에 두고 다른 스레드와 공유
다중 스레드로 구성된 프로세스의 장점
- 멀티CPU 또는 멀티코어 컴퓨터 시스템
- 다중 쓰레드를 병렬 처리 가능
- 처리속도별로 쓰레드가 나눠진 경우
- 효율적인 처리 가능
- ex. 계산용 쓰레드 - 입력용 쓰레드 - 백업용 쓰레드
정리하기
- 프로세스는 실행 중인 프로그램을 의미하며, CPU, 메모리, 파일, 입출력장치 등 실행에 필요한 자원이 할당된다.
- 프로세스 제어 블록은 프로세스를 명시해 주는 다양한 내용을 포함하고 있다.
- 프로세스는 생성, 준비, 실행, 대기, 종료의 다섯 상태 중 하나로 존재하며, CPU의 스케줄링, 입출력 대기 등에 따라 준비, 실행, 대기 등으로 상태가 변화되며 동작한다.
- 쓰레드는 프로세스에서 실행의 개념만 분리한 것으로 디스패칭의 단위이다.
- 하나의 프로세스 내에는 하나 이상의 쓰레드가 있을 수 있어, 다중 쓰레드를 생성하여 프로세스 내에서의 다중처리를 할 수 있다.
'방송통신대학교 > 운영체제' 카테고리의 다른 글
[운영체제] 3강. 프로세스 스케줄링 (0) | 2023.04.17 |
---|---|
[운영체제] 1강. 운영체제 소개 (0) | 2023.04.16 |