- Trap
- Exception: 프로그램이 오류를 범한 경우
- System call: 프로그램이 커널 함수를 호출하는 경우
✅ 동기식 입출력과 비동기식 입출력
동기식 입출력 (synchronous I/O)
- I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
- 구현 방법 1
- I/O 가 끝날 때까지 CPU를 낭비시킴
- 매시점 하나의 I/O 만 일어날 수 있음
- 구현 방법 2
- I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
- I/O 처리를 기자리는 줄에 그 프로그램을 줄 세움
- 다른 프로그램에게 CPU를 줌
- ⇒ CPU가 놀지않고 일함 !
비동기식 입출력 (asynchronous I/O)
- I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어감
두 경우 모두 I/O 의 완료는 인터럽트로 알려줌
✅ DMA (Direct memory Access)
- 메모리에 접근할 수 있는 장치
- I/O 장치는 다양하고, 자주 interrupt가 발생하여 CPU의 작업을 방해할 수 있다. ⇒ CPU가 인터럽트를 너무 많이 당함 ⇒ 오버헤드 상승으로 효율적 동작을 못함
- 메모리 접근을 DMA에게 수행시킴 ⇒ 데이터가 쌓이면 해당 데이터들을 메모리로 복사를 한 후 CPU에게 인터럽트를 발생시킴 ⇒ 인터럽트 빈도가 하락한다. (효율상승)
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
- CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 bloc k단위로 직접 전송
- 바이트 단위가 아닌 block단위로 인터럽트 발생
✅ 서로 다른 입출력 명령어
- I/O 를 수행하는 special instruction 에 의해
- memory Mapped I/O에 의해
- 메모리 접근 instruction이 따로 있지 않음
✅ 저장장치 계층 구조
- Speed, Cost, Volatitlity
- 위로 갈수록 빠르고 용량이 적고 비용이 비싸다.
- 캐싱: copying information into faster storage system.
✅ 프로그램의 실행
프로그램은 파일 형태로 파일시스템에 저장된 후 메모리에 올라가서 프로세스가 된다.
- 가상 메모리 : 어떤 프로그램 실행 시 메모리 공간이 생긴다. (stack, code, data)
- 주소 변환을 통해 물리 메모리로 적재 후 실행
- 커널은 항상 상주해 있음
- 물리메모리에 모든 프로세스의 메모리가 적재된 것이 아닌 그때그때 필요한 메모리만 적재한다. (당장 필요한 것만 ⇒ 메모리 낭비 방지)
- 가상 메모리 : 가상으로 존재하는 메모리이다. 실제로는 연속적으로 할당되어 있지 않다.
- 가상 주소 ⇒ 물리 주소 : 주소 변환
✅ 커널 주소 공간의 내용
- code
- 시스템 콜, 인터럽트 처리 코드
- 자원관리를 위한 코드
- 편리한 서비스 제공을 위한 코드
- data
- PCB, CPU, mem, disk
- 운영체제가 사용하는 여러 자료구조들이 있음
- stack
✅ 사용자 프로그램이 사용하는 함수
- 사용자 정의 함수: 자신의 프로그램에서 정의한 함수
- 라이브러리 함수: 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수, 자신의 프로그램의 실행 파일에 포함되어 있다.
- 커널 함수: 운영체제 프로그램의 함수(커널함수의 호출 = 시스템콜)