본 포스팅은 이화여자대학교 KOCW 공개 강의 [운영체제]를 참조하여 작성하였습니다.
Why?
- 운영체제는 컴퓨터 시스템의 자원을 효율적으로 관리하기 위하여 존재한다.
- 사용자들에게 형평성 있는 자원 분배
- 주어진 자원으로 최대한의 효율 추구
처리 방식
일괄 처리(batch processing)
- 작업양을 모아서 한꺼번에 처리
- 작업이 완전히 종료될 때까지 기다려야 함
시분할(time sharing)
- 여러 작업들을 동시에 실행하는 것처럼 보이게 함
- 각 태스크에게 시간을 쪼개어 할당
실시간(Realtime OS)
- 종료시각이 반드시 보장되어야 하는 OS
- Ex) 원자로 제어, 반도체 공장, 미사일 제어
Hard Realtime System
Soft Realtime System
- 데드라인이 존재하긴 하지만 못 맞추더라도 치명적인 피해는 X
- Ex) 영화
컴퓨터 시스템 구조
- CPU는 메모리에서만 값을 읽어들인다.
- mode bit: 현재 프로그램이 OS인지 사용자 프로그램인지 구분
1: 사용자 모드 👉🏻 특정 instruction만 수행 가능
0: 커널 모드 👉🏻 모든 instruction 수행 가능
- interrupt line: instruction 구분을 위하여
- CPU는 instruction을 기준으로 명령을 실행
- timer: 특정 프로그램의 CPU 독점 방지
- I/O device는 사용자 프로그램이 제어할 수 없다. 따라서 운영체제에게 CPU를 넘기고 대신 제어하도록 한다.
- I/O device가 CPU에게 너무 많은 interrupt를 거는 것을 방지하기 위하여 DMA controller가 존재
- I/O device의 내용을 CPU로 거치지 않고 DMA controller가 직접 memory에 접근하여 수정
- memory controller: CPU와 DMA의 교통정리
Interrupt
- 인터럽트 당한 시점의 Program Counter(이하 PC)를 저장 후 CPU 제어를 인터럽트 처리 루틴에 넘김
종류
- 하드웨어 인터럽트: Interrupt라고 불림
- 소프트웨어 인터럽트: Trap이라 불림
Exception: 프로그램이 오류를 범한 경우
system call: 프로그램이 커널을 호출한 경우
Synchronous vs Asynchronous
정석적인 표현 방식이 아닌 내가 이해한 바로, 내가 기억하기 좋게 정리함
- 영화를 볼 때 "씽크가 맞지 않는다."라는 표현을 사용함
- 위 문장을 풀어 서술하면 "화면과 소리의 타이밍이 맞지 않는다."
- A 화면이 출력될 때 A 소리가 출력되어야 하는데 씽크가 깨지면 A 화면이 나오지도 않았는데 A 소리가 나옴. 이것이 Async
- 다시 말해, sync는 시간과 관계 없이 I/O의 입출력을 온전히 받아들이고 동작하는 방식이고
- async는 I/O의 입출력이 정상적으로 들어왔든 그렇지 않든 시간이 다 되면 동작하는 방식
프로그램 실행 과정
- 각각의 실행파일들에게 가상 메모리 부여
- 가상 메모리들 중에서 필요한 부분만 실제 메모리에 탑재
- 실제 메모리의 공간 부족을 대비하여 Swap area 존재
- File system은 전원 유무와 관계 없이 파일 저장
- Swap area는 전원 차단시 파일 휘발
커널 주소 공간의 내용
프로세스
프로세스는 [실행 중인 프로그램]이다.
프로세스의 문맥
- 프로세스의 문맥은 왜 필요할까?
- 위 그림과 같이 3가지 상황을 가정해보자.
- 기존 프로세스를 실행하고 있다가 시스템 콜
- 커널에서 작업을 끝낸 후 다시 프로세스로 복귀
- 1번에서 했던 instruction을 이어 받아야 함
마지막으로 했던 instruction의 위치를 파악(문맥을 파악)해야 그 다음 명령어를 수행 가능하다!
프로세스 상태도 초안
- running: CPU를 잡고 instruction을 수행중인 상태
- ready: CPU를 기다리는 상태
- waiting: CPU를 주어도 instruction을 수행할 수 없는 상태
Ex) 디스크에서 파일을 읽어오는 경우
- new: 프로세스가 생성 중인 상태
- terminated: 수행이 끝난 상태
PCB
Process Control Block
- Why? 운영체제가 프로세스를 관리하기 위하여
- 프로세스의 문맥을 파악하는 용도로 사용!
- 프로세스 A의 문맥을 PCB에 저장
- 프로세스 B의 문맥을 PCB에서 불러옴
- CPU 실행
구조체
- 운영체제가 관리상 사용하는 정보
- CPU 수행 관련 하드웨어 값
- 메모리 관련
- 파일 관련
스케줄러
장기 스케줄러
job scheduler
- 시작 프로세스 중 어떤 것을 ready queue로 보낼지 결정
- 메모리에 어떤 프로세스를 할당할 것인가?
- degree of multiprogramming 제어
degree of multiprogramming이란?
메모리에 프로세스를 얼마나 적재할 것인지 조율하는 이슈
- time sharing에는 장기 스케줄러가 없음 , 바로 ready queue에 올라감
단기 스케줄러
CPU scheduler
- 어떤 프로세스를 running 시킬지 결정
- 어느 프로세스에 CPU를 할당할 것인가?
중기 스케줄러
Swapper
- 메모리에서 어떤 프로세스를 뺄 것인가?
- degree of multiprogramming 제어
blocked와 suspended의 차이
- blocked는 자의적이고 suspended는 타의적이다.
- I/O event를 위하여 스스로 CPU를 내어준 것은 자의적이므로 blocked 상태
- 중기 스케줄러에 의하여 메모리를 뺏겨 프로세스 수행이 정지되면 suspended 상태
최종 프로세스 상태도
스레드
스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위
lightweight process
- 스레드 상호 간 코드와 데이터만 공유
- 스택은 별도 부여
언제?
- 스레드는 같은 일을 하는 프로세스를 여러 개 실행하고 싶을 때 사용한다.
- 동일한 프로세스를 여러 개 생성하면 메모리 낭비가 심하므로 하나의 프로세스에서 여러 개의 스레드로 쪼개어 실행하면 동일한 효과 발생