728x90
반응형
1. 프로세스
프로세스의 개요
- 프로세스(process) : 실행 중인 프로그램
- 프로그램: 동작을 하지 않는 정적, 수동적 개체
- 프로세스: 동작을 하는 능동적 개체
- ex) 저장장치에는 mb -> 프로세스로 만들어지고 난 후에 kb
- ex) window 작업관리자 -> 현재 내 pc에서 실행중인 프로세스가 쭉 나열되서 나타난다.
- 작업관리자에는 각 프로세스에 대해서 CPU, 메모리, 디스크, 네트워크를 얼만큼 사용중인지 나와있다.
- 메모리 사용량? 저장장치에 있던 파일이 프로세스가 되면서 실제 메모리 공간을 할당받아서 사용하는 공간이 표기되어 있다.
- 작업관리자라는 프로세스 자체의 사용량도 나와있다.
- 실행중인 프로그램은 원래 저장장치에 파일형태로 저장되어 있다.
- 실행이 되면 운영체제 입장에서 관리하는 이름은 PID(process ID) 로 이용하게 된다.
- 운영체제로부터 자원을 할당 받아서 동작
- 자원: CPU, 메모리, 입출력장치, 파일 등 (자원을 할당받음)
- 동작: CPU가 프로세스의 명령을 실행 (마지막 단계로 CPU를 할당 받아서 실행됨)
운영체제(프로세스 관리자)가 처리하는 작업
- 프로세스를 생성 및 종료
- 프로세스를 실행시키기 위한 스케줄링 작업
- 프로세스의 상태 관리(대기, 준비, 전이 등)
프로세스의 구성
- 메모리 구조와 프로세스 제어 블록으로 하나의 프로세스가 생성이 된다.
- 메모리 구조
- 프로그램 실행에 직접적으로 필요한 코드와 데이터
- 코드 영역(프로그램 자체)
- 데이터 영역(코드가 실행될 때 필요한 데이터)
- 정적 데이터 영역 (상수나 변수의 값)
- 스택 영역 (서브프로그램 정보, 지역 변수 정보) 호출 상태 등
- 힙 영역 (사용자가 수동으로 할당하는 것들)
- 프로세스 제어 블록 (Process Contorl Block:PCB)
- 운영체제가 프로세스를 관리하기 위해 필요한 정보
- PID (프로세스 번호): 메모리상의 프로세스로 존재하고 해당하는 프로세스가 무엇인지 구분을 함
- 프로세스 상태
- 프로그램 카운터(Program Counter, PC)는 컴퓨터의 중앙 처리 장치(CPU) 내부에 있는 레지스터로, 다음에 실행할 명령어의 주소를 저장하는 장소. 명령어 포인터(IP)라고도 불린다.
- 레지스터: 프로세스 사용 중 다른 프로세스를 사용하고 왔을 때 레지스터에 보관 후 다시 사용할 때 쓰임
- 메모리 관리 정보
- 프로세스 우선순위
- 회계 정보
- 각 프로세스마다 존재
- 여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용
- 운영체제가 프로세스를 관리하기 위해 필요한 정보
- 프로세스 상태 (가장 기본적인 5가지 상태)
- 생성
- 처음 작업이 시스템에 주어진 상태
- 준비
- 실행 준비가 되어서 CPU할당을 기다리는 상태 (PCB가 만들어짐 > PID가 생성됨 > 메모리공간 할당 받음 .... )
- 준비 큐에 들어가진 상태
- 실행
- 프로세스가 처리되는 상태
- CPU가 프로그램에 있는 명령어를 처리해줌
- 대기
- 프로세스가 I/O 작업이 끝날 때까지 또는 특정 자원을 할당받을때까지 보류되는 상태
- CPU를 붙잡는것이 아닌 다른 자원에 CPU를 내어주고 특정 자원을 할당받을 때까지 기다리고 있는 상태
- 생성/준비/실행을 오가는 형태
- 종료
- 프로세스가 더 이상 실행되지 않도록 끝난 상태
프로세스 상태 변화
- 생성 -> 준비 -> 디스패치 -> 실행
- 디스패치: 특정 프로세스에 CPU를 할당하는 과정 자체
- 생성 -> 준비 -> 디스패치 -> 실행 -> 이벤트 대기 -> 대기
- 만약 할당 시간이 만료 됐을 때는 실행 -> 준비로 되돌아갈 수 있다.
- 또는 나보다 우선순위가 더 높은 프로세스에 CPU를 디스패치 해줘야 하는 상태일 때 실행 -> 준비로 돌아감
- 생성 -> 준비 -> 디스패치 -> 실행 -> 이벤트 대기 -> 대기 -> 재개 조건 만족 -> 준비 -> 실행 -> 종료
프로세스 생성 방법
- 사용자가 프로그램을 직접 실행
- 한 프로세스가 다른 프로세스를 생성
- 사용자가 실행하는 것이 아닌 프로세스 생성 시스템 호출 이용
- 부모 프로세스: 시스템 호출을 하는 프로세스
- 자식 프로세스: 시스템 호출을 통해 새로 생성된 프로세스
- 트리형태의 부모 자식 관계 프로세스가 생성됨
프로세스 생성 시스템 호출
- UNIX, Linux: fork()
- 자식 프로세스는 부모 프로세스의 복제본
- 부모 프로세스가 가진 PID만 다르고 fork()로 받은 값은 부모프로세스의 경우는 자식의 PID를 갖고 자식 프로세스의 PID값은 0으로 표기
- windows: CreatProcess()
- 자식 프로세스는 새로운 프로그램으로 생성
프로세스 종료 방법
- 프로세스가 모든 처리를 완료 (정상적 종료)
- 부모 프로세스에 의해 자식 프로세스가 강제 종료
- 프로세스 종료 시스템 호출 이용
- 자식 프로세스 생성 시 얻은 자식 PID 이용
- 부모 프로세스가 종료되는 경우 운영체제가 자식 프로세스 종료
2. 쓰레드
프로세스: 하나의 프로그램을 실행하기 위한 기본적인 단위
- 자원 소유의 단위
- 프로세스가 자원 소유의 단위가 된다. 메모리 구조상에 여러가지 자원을 가지고 있고 하나의 메모리 구조로 이루어져 있다.
- 디스패칭의 단위
- 하나의 제어흐름만 존재한다.
- 프로세스 내에서 다중처리 불가능
- 프로세스 내에서 다중처리를 위한 제안된 개념
- 하나의 프로그램을 실행하기 위한 기본적인 단위
- 디스패칭의 단위가 된다. (CPU를 할당받아서 명령어를 처리를 쓰레드 별로 디스패칭 받아서 처리)
- 전통적으로는 프로세스 자체가 디스패칭의 단위이고 자원 소유의 단위였지만 디스패칭의 단위는 쓰레드가 되고 자원 소유의 단위는 프로세스가 된다.
- 자원 소유의 단위: 프로세스
- 하나의 프로세스 내에는 하나 이상의 쓰레드가 존재
- 전통적인 프로세스: 하나의 PC를 가지고 디스패칭
- 쓰레드가 있는 프로세스: 프로세스 안에 별도로 쓰레드를 가지고 있고 그게 PC를 가지고 있다.
- ex)프로세스 안에 쓰레드가 3개가 있을 경우 디스패칭 단위를 따로따로 가지고 관리를 하게 됐다.
- 쓰레드는 실행에 필요한 최소한의 정보만 가진다.
- pc를 포함한 레지스터 값
- 쓰레드마다 레지스터/상태/스택 값을 갖는다.
- 상태정보
- 스택영역
- pc를 포함한 레지스터 값
- 나머지 정보는 프로세스에 두고 다른 쓰레드와 공유
- 프로세스 자체를 자원소유의 단위로 보기때문에 공유를 한다.
- 멀티 CPU 또는 하나의 CPU에 멀티코어 컴퓨터 시스템
- 다중 쓰레드를 병렬로 처리 가능
- ex) 코어가 3개인 컴퓨터에 동시에 쓰레드가 사용가능하다.
- 코어가 하나일 경우 처리속도별로 쓰레드를 나눌 수 있다.
- 효율적인 처리 가능
- 역할에 따라 용도별로 쓰레드를 나눠서 사용
- ex) 계산용 쓰레드, 입력용 쓰레드, 백업용 쓰레드
728x90
'TIL' 카테고리의 다른 글
운영체제 - 프로세스 스케줄링 (0) | 2025.04.07 |
---|---|
운영체제 - 운영체제 소개 (0) | 2025.03.31 |
서블릿, 멀티 쓰레드 (1) | 2025.01.19 |
TIL - 스택 (0) | 2025.01.07 |
TIL - 배열과 연결리스트 (1) | 2025.01.02 |
댓글