운영체제에서 기억하고 싶은 내용
프로세스(Process)
실행 중인 프로그램
프로그램 자체는 정지된 녀석인데, 프로세스는 동작 하는 능동적 개체
어떻게 정적인 프로그램이 동작을 하는 프로세스가 되나?
운영체제한테 자원을 할당 받아 동작한다
- 받는 자원: CPU, 메모리, 입출력장치, 파일 등
- 동작: CPU가 프로세스의 명령 실행
프로세스의 구성 1 : 메모리 구조
실행에 필요한 코드와 데이터
- 코드 영역: 프로그램 자체
- 데이터 영역: 프로그램 실행시 필요한 데이터(상수, 변수, 서브프로그램 호출상태 등)
데이터 영역 3가지로 나뉜다
- 정적 데이터 영역
- 스택 영역
- 힙 영역
프로세스 구성 2 : 프로세스 제어 블록(PCB: Process Control Block)
운영체제가 프로세스 관리를 위한 정보가 저장되어 있다
프로세스 번호(PID), 프로세스 상태, 프로그램 카운터(PC), 레지스터 ... 등
각 프로세스마다 PCB가 존재한다
프로세스의 상태
생성
- 처음 작업이 시스템에 주어진 상태
- PCB를 만들어준다
준비
- CPU 할당을 기다리는 상태
실행
- 프로세스가 처리되는 상태
대기
- 특정 자원을 할당 받을 때까지 보류되는 상태
- 예시) 입출력(I/O) 작업이 끝날 때까지
종료
- 프로세스가 더 이상 실행되지 않도록 끝난 상태
프로세스 상태 변화
- 생성 -> 준비
- 준비 -> 실행: 디스패치(CPU 할당)
- 실행 -> 준비: 준비 큐로 돌아감
- 실행 -> 대기: 이벤트 대기
- 대기 -> 준비: 재개 조건 만족되면
- 실행 -> 종료: 실행이 끝나면, 에러 나면, 부모 프로세스에서 멈추라고 할 때
부모 - 자식 프로세스
프로세스 생성 시스템 호출로 한 프로세스가 다른 프로세스 생성 가능
프로세스 생성 시스템 호출(UNIX, Linus 명령어)
fork()
부모 프로세스를 복제해서 자식 프로세스 만드는 것
다 똑같은데 PID만 다르다
exec()
부모 프로세스와 다른 자식 프로그램 실행
PID만 같고 나머지는 다르다
프로세스 생성 시스템 호출(Windows)
CreateProcess()
새로운 프로그램으로 자식 프로세스 생성
쓰레드(Thread)
- 프로세스 안에서 다중처리를 위해 나온 개념
- 하나의 프로그램을 실행하기 위한 기본적인 단위가 되었고
- 디스패칭의 단위
- 하나의 프로세스에서 쓰레드 하나 이상 존재 가능
쓰레드에 포함된 것
실행에 필요한 최소한 정보만 갖는다
- PC를 포함한 레지스터
- 상태 정보
- 스택 영역
다중 쓰레드가 왜 좋을까?
단순히 생각해서 다중 쓰레드로 효율적인 처리 가능