CS 복습을 위해 강의 영상을 정리한 내용을 공유합니다.
전체 정리는 Notion을 참고해주세요.
Process
Job vs Process
- Job, Program : 실행 할 프로그램과 데이터 (실행 요청 전의 상태)
- Process : 실행을 위해 시스템(커널)에 등록된 작업. 성능향상을 위해 프로세스는 커널이 관리한다. (시스템에 등록되어 메모리를 할당 받은 프로그램)
프로세스의 여러가지 정의(면접대비)
- 커널에 등록된 작업
- 리소스를 요청하고 할당받을 수 있는 개체
- 프로세스 관리 블록(PCB)를 할당 받은 개체
- 능동적인 개체 - 리소스 요구,할당,반납 가능
- 실행중인 프로그램
프로세스 종류
- 역할에 따라 : 시스템(커널) 프로세스 / 사용자 프로세스
- 병행 수행 방법에 따라 : 독립 프로세스 / 협력 프로세스
리소스 종류
- 리소스 : 커널의 관리 하에 프로세스에게 할당/반납이 가능한 수동적인 개체.
- HW 리소스 : 프로레서, 메모리, 디스크, 모니터, 키보드 등
- SW 리소스 : 메세지, 시그널, 파일, SW 등
PCB (Process Control Block)
PCB란?
- OS가 프로세스 관리에 필요한 정보를 저장하는 개체
- 프로세스가 생성되었다 = PCB가 생성되었다
- 프로세스는 메모리에 있고, 그 프로세스를 관리하는 PCB는 커널 영역에서 관리한다.
PCB가 관리하는 것들
PCB = 운영체제가 프로세스를 관리하기 위한 것.
→ 운영체제에 따라 다르다!
- PID : 프로세스 식별 번호
- 스케줄링 정보
- 프로세스 상태 : 리소스 할당을 요청했는지 등
- 메모리 관리 정보 : 페이지 테이블, 세그먼트 테이블 등
- 입출력 상태 정보 : 입출력 장치 정보, 파일 정보 등
- 컨텍스트 저장 영역 : 프로세스의 레지스터 상태를 저장 (=Context)
- 계정 정보 : 계정 정보, 자원 사용 시간 등
Process States
상태
- state = 자원간의 상호 작용에 의해 결정되는 것
active state
1. created
- “생성된 상태”
- 프로그램(작업)이 커널에 등록된 직후 최초의 상태
- 이 상태 단계에서 PCB와 함께 프로세스가 생성된다.
- 다음 상태 : ready, suspended ready
- 쓸 수 있는 메모리 공간이 있으면? ready
- 없으면? : suspened ready
2. ready
- “프로세서 외 다른 모든 자원을 할당 받은 상태”
- 프로세서 : CPU와 같은 장치
- 즉, CPU만 있으면 즉시 실행 가능한 상태
- 다음 상태 : running
- dispatch 혹은 schedule 되면 CPU를 할당 받는다.
3. running
- 프로세서 + 리소스를 모두 할당 받은 상태(실행중)
- 다음 상태 : ready, asleep
- preemption(프로세서를 뺏김) 당하면 ready
- IO와 같은 자원 할당 요청에 의해 블록 당하면 asleep
4. blocked, asleep
- 프로세서 외의 다른 리소스를 기다리는 상태 (반대: 프로세서를 기다림 = ready)
- 다른 리소스는 system call에 의해 할당된다.
- 다음 상태 : asleep → ready
- 바로 running으로 돌아갈 수 없음.
- wake up 이라는 호출을 통해 ready상태가 되기를 기다렸다가 running으로 돌아간다.
4. terminated(zombie)
- 프로세스의 작업이 모두 수행이 끝난 상태
- 모든 리소스를 반납 + 커널 내 일부 PCB 정보만 남긴다. (이후 프로세스 관리를 위한 정보 수집을 목적)
suspended state (지연된)
- 메모리를 할당 받지 못한 상태에서 작동.
- suspended = 메모리 없이 ready or blocked 된 상태
- 메모리를 뺏긴다 = swap-out, 메모리를 받는다 = swap-in
- 그렇다면 메모리에 작성되어 있던 프로세스의 작업 정보는?
- 진행중인 작업을 따로 보관하게 된다.
- 메모리의 상태를 저장하는것 = 메모리 이미지 (memory image)
- 메모리 이미지는 swap device에 저장한다.
Interrupt
인터럽트
- 예상치 못한 or 외부에서 발생한 일종의 이벤트
- 언제?
- I/O
- Clock (CPU clock과 연관)
- Console (콘솔창에 뭔가 입력해서 발생)
- Program check (프로그램 문제 발생 시)
- Machine check (하드웨어 문제 발생 시)
- Inter-process (다른 프로세스에서 발생)
- system call
인터럽트 처리
- 인터럽트 발생 (외부 환경 → 프로세스)
- 커널이 하고 있던 프로세스를 중단시킴
- 인터럽트를 처리함
- Interrupt handling : 인터럽트의 발생 위치와 원인 체크 → 인터럽트를 서비스 할 지 결정(서비스가 필요한지)
- interrupt service : 만약 서비스가 필요하다면 인터럽트 서비스 루틴을 호출함.
인터럽트 처리 과정(details)
- 인터럽트 발생
- 프로세스에서 Context Saving 이라는 과정을 통해, 현재 실행 정보를 PCB에 저장
- 커널 개입으로 인터럽트 핸들링 시작
- 원인 파악
- 처리하기 위해 어떤 서비스 루틴이 필요한지 확인
- 결정된 인터럽트 서비스를 호출 (서비스 = 일종의 프로그램) → 프로세서에서 실행중이던 프로세스 대신 서비스를 가져와서 실행함
- 서비스가 끝나게 되면, ready 상태에 있던 프로세스 중 하나를 다시 프로세서에 할당
- 기존에 실행중이던 프로세스가 실행될 수 있지만, 스케줄링에 따라서 다른 프로세서도 들어올 수 있음.
- 프로세스가 프로세서에 다시 할당되면, Context Saving 과정을 통해 저장했던 정보를 Context Restoring 과정을 통해 가져옴.
Context Switching
- Context : 우리말로 문맥, 프로세스(혹은 프로세스 실행)와 관련된 정보들의 집합
- CPU → Register를 가지고 있음. 반드시 데이터를 레지스터에 올리고 그걸 가지고 작업을 함. → 이때 레지스터에 가져온 정보드를 register context라고 한다.
- 그 외 코드나 데이터, 스택, PCB → 메모리 안에 저장된 context
- Interrupt에 의해 교체되는 과정 : CPU에서 실행되던 프로세스의 정보를 교체함 ⇒ CPU Register Context를 저장하고, 가져와야 함.
- Context Saving : 현재 프로세스의 register context를 PCB안에 저장ㅇ
- Context Restoring : Register Context를 프로세스에 복구
- Context Switcing : 실행중인 프로세스의 context를 저장, 앞으로 실행할 프로세스의 Context를 복구하는것 (saving + restoring)
Overhead
- OS마다 다름. 성능에 큰 영향
- 불필요한 context switching을 줄여야 오버헤드를 줄일 수 있음.
- 가능하면 context switching을 줄이자.
- 가장 대표적인 방법 : 스레드