🔸Operating systems
- 유저: 컴퓨팅 문제를 풀고싶은 사람, 기계, 컴퓨터
- 프로그램: 유저의 컴퓨팅 문제를 리소스를 사용해서 해결
- OS: 하드웨어 사용 제어 → 얘만 실물이 아닌 컴포넌트
- 하드웨어: 리소스 제공 (CPU, memory, I/O)
- 어플리케이션을 위해 하드웨어를 사용하기 쉬운 형태로 변환하는 소프트웨어
- 커널
목적
편리성, 효율성, 안전성
- 유저가 프로그램을 실행하고 문제를 쉽게 해결할 수 있도록 하는 환경 제공
- 컴퓨터 시스템 사용하기 쉽도록, 프로그램이 의도하지 않아도 잘 실행되도록
- 컴퓨터 하드웨어를 효율적이고 안전한 방식으로 사용하도록
하는 일
- 리소스 매니저 (자원 관리)
- 여러 요청에 효율적이고 공평하게 리소스 사용하도록 결정
- CPU, 메모리, I/O디바이스 간 자원관리가 핵심 작업
- control program: 에러와 부적절한 컴퓨터 사용 막는 프로그램
services
OS는 유저에게 도움이 되는 기능 제공
- UI: command-line interface, graphics user interface
- program excution: 메모리로부터 프로그램을 로드하고 실행
- I/O: 파일이나 기기의 I/O 요청
- file system: 파일과 폴더 생성, 삭제, 읽기, 쓰기, 찾기, 접근 허용
- communications: 프로세스가 정보 교환
- error detection: 에러 감지 및 적절한 액션 취함
🔸Computer systems (자원관리)
I/O디바이스를 어떻게 처리하고 자원관리는 어떻게 할까?
CPU와 device controllers가 common bus로 연결 (common bus는 메인 메모리로의 접근 제공)
- 각 I/O디바이스마다 device controller를 가지고, 로컬 버퍼가 존재
- input들은 로컬 버퍼에 있다가 버스를 통해 메인 메모리로 이동
이때 이동하는 규칙 세가지는 아래와 같다.
1. Programmed I/O (=Polling)
평등, 모든 디바이스를 하나씩 돌아가며 처리
- CPU는 디바이스 컨트롤러를 통해 I/O디바이스의 상태를 반복적으로 확인 (예를 들어 I/O동작 요청이 완료됐는지..)
- ready 상태면 CPU는 데이터를 I/O operation에 데이터 제공
- 한 디바이스에서 많은 input이 있는 경우, CPU가 비효율적으로 사용될 수 있음
- I/O디바이스가 ready될 때까지 계속 기다림, 시간 낭비, busy waiting
2. Interrupt-driven I/O
디바이스 컨트롤러는 interrupt를 발생시켜 CPU에게 이벤트 알림
- I/O디바이스에서 이벤트 발생할 때
- 디바이스 컨트롤러가 I/O operation를 끝냈을 때
CPU는 메모리 일만 하다가, interrupt가 오면 I/O일을 하게됨
Interrput가 발생하면 (interrupt handling)
- OS는 CPU의 현재 상태 보존
- interrupt handling 후 다시 돌아오기 위해
- 레지스터와 interrupted instruction의 메모리 주소 저장
- interrupt service routine(interrupt handler)으로 점프
- 보존한 상태를 복원하여 복귀


3. DMA I/O
Direct Memory Access
interrup로 CPU의 busy waiting은 없어졌지만, 많은 양의 데이터를 메모리로 이동시키기 위해 interrupt처리하면 시간이 오래걸려 하나의 I/O가 CPU를 점유하게 될 수 있다 → DMA
- I/O operation을 다루기 위해 각 디바이스 컨트롤러에 DMA controller라는 하드웨어 사용(small cpu역할)
- DMA는 CPU를 거치지 않고 device controller와 메인 메모리 사이에서 데이터를 전송 가능

- 하지만 DMA컨트롤러가 비싸고, CPU가 처리해주는 것보단 느리다
💡 이 세가지 방식은 적당하게 용도에 따라 같이 사용된다~
🔸Multipleprogramming
좀 더 구식
- 멀티 프로그램은 CPU나 I/O 디바이스가 항상 바쁘도록, 할 일이 무조건 있도록 할 수 있음 (never idle)
- I/O때문에 기다려야하면, OS는 다른 일을 하도록 교체 → 계속 바쁨
- 메모리에 할 일들이 있고, 그 중 하나 선택되고 실행하는 것은 job scheduling

🔸Multitasking(Time sharing)
좀 더 신식?
- 멀티프로그래밍의 확장, CPU가 주기적으로 할 일을 switch
- 각 일은 time slice가 주어지고, time slice만큼 실행하면 다른 일로switch
- switch로 돌다가 다시 돌아오는데 걸리는 시간: response time < 1초 여야함

🔸Dual-mode operation
어플리케이션이 디스크 드라이브에 바로 접근한다면? interrupt handlers가 override된다면? HLT instruction을 실행한다면? → 시스템에 피해가 갈 수 있다 → OS는 시스템을 지키기 위해 user/kernel mode로 동작한다.
- user/kernel mode
- 하드웨어의 mode bit로 kernel, user mode 설정
- HLT같은 privileged instruction(위험한 액션)은 kernel 모드에서만 실행 가능
Privileged instruction(조심히 다뤄야하는 instruction)
- direct I/O access
- 저장장치(디스크)의 데이터를 읽고 쓸 때 캐시를 통해 indirect하게 작동한다. direct하게 작동하면 보안에 취약해질 수 있음
- Accessing/manipulating system registers
- 레지스터의 값을 바꿔서 서브루틴 후 리턴이 안되게 하거나, 이상한 주소를 가리키거나.. 보안에 취약함. 또는 실수로 건드리더라도 하드웨어에 안좋은 영향을 미칠 수 있음
- memory state management
- HLT
얘네들을 user mode에서 실행하면 exception 발생
- 최근 CPU들은 2개 이상의 모드를 제공하기도 함
- ex) virtual machine manager
Interrupt vs Exception
- Interrupt = hardware interrupt
- 하드웨어 장치에 의해 발생
- 비동기적(아무때나) 발생
- Exception(system call) = software interrupt
- instruction에 의해 발생 (software error: 접근 제한 데이터에 접근, 0으로 나누기, 미할당 주소 접근 등)
- 동기적 (CPU가 instruction을 실행할 때 발생하니까)
유저모드와 커널모드를 변환하는 2가지 방법
1. by interrupt(hardware interrupt): 비동기적 (ex. timer)
- 커널모드에서 OS가 interrupt 발생 타이머 세팅, 유저모드에서 CPU를 통해 어플리케이션이 동작하다가 timer interrupt 발생, 커널모드로 바뀌고 할일 하고 다시 유저모드로 돌아가고
2. by system call(software interrupt): 동기적 ⭐
- 유저모드에서 system call을 발생시켜서 커널 모드로 변환되고 일 처리 후 유저모드로 돌아옴
🔸System calls
OS가 제공하는 유용한 함수(programming interface), 위험해서 high level 언어로 숨겨둔?
- OS services

종류
- Process control
- File management
- Device management
- Information maintenance
- Comminications
- Protection
즉, 얘네들은 보안 취약점인 것임.. 그래서 system call로 묶어버려
ex) 다른 파일로 내용을 복사하는 과정에서의 system call
Parameter passing
system call을 사용할 때 파라미터를 넘겨주는 방법
1. 레지스터를 통해 파라미터 전달 → 레지스터보다 파라미터가 많을 수 있음 (그래도 이게 젤 빠름)
2. 파라미터들은 메모리의 블록에 저장되고, 그 블록의 주소를 레지스터로 전달 (Linux, Solaris)
- 파라미터들이 user program에 의해 스택에 넣어지고, OS에 의해 pop됨
block과 stack 방법은 파라미터 크기 제한이 없다~