컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층
하드웨어를 몰라도 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
자원을 효율적으로 관리
이 수업에서는 다중 작업, 다중 사용자, 시분할 방식을 택함.
Multitasking / Multiprogramming / Time sharing / Multiprocess 는 모두 컴퓨터에서 여러 작업을 동시에 수행하는 것을 말함.
다만 Multiprogramming은 여러 프로그램이 메모리에 올라가 있음을 강조.
Time Sharing은 CPU의 시간을 분할하여 나누어 쓴다는 의미를 강조.
다만 Multiprocessor는 하나의 컴퓨터에 CPU(processor)가 여러 개 붙어 있음을 의미
CPU가 사용자 프로그램에게 넘어가면 운영체제는 아무것도 할 수 없기 때문에 CPU를 누가 쓰고 있는지 표시.
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위해 보호 장치가 필요.
1 사용자 모드 : 사용자 프로그램 수행
0 모니터 모드 : OS 코드 수행
정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 interrupt 발생.
(CPU를 특정 프로그램이 독점하는 것을 보호)
Time sharing 구현과 현재 시간 계산을 위해서도 사용.
모든 I/O장치들에게 CPU가 요청하는 것은 특권 명령임. 따라서, 운영체제에게 요청해야함. (System call)
사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것.
I/O는 실제 device와 local buffer 사이에서 일어남.
Device Controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림.
OS 코드 중 각 장치별 처리 루틴 -> software
CPU가 I/O Controller에게 부탁을 할 때 사용되는 소프트웨어
각 장치를 통제하는 일종의 작은 CPU -> hardware
I/O 장치 안에는 Firmware(펌웨어)가 들어감. CPU에게 받은 명령어를 수행하게 하는 소프트웨어
현대의 운영체제는 interrupt에 의해 구동.
Timer interrupt라면, CPU를 다른 프로그램에게 넘겨줌.
Device controller에서 들어온 interrupt라면, 요청한 정보를 가지고 그 이후에 해야할 일을 진행함.
인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있음.
인터럽트 처리 루틴(=interrupt Service Routine, 인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수
두 경우 모두 I/O의 완료는 인터럽트로 알려줌.
I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감.
Interrupt도 일종의 overhead.
원래 입출력이 들어오면 local buffer에 잠시 저장 후, interrupt 발생.
그러면 CPU가 local buffer 속 내용을 copy한 후 memory에 접근해 저장함.(비효율적)
따라서 DMA(Direct Memory Access)를 통해 interrupt가 자주 걸리는 것을 방지.
빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용.
CPU의 중재없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송.
바이트 단위가 아닌 block 단위로 인터럽트 발생시킴.
Buffer 속 일정 분량이 채워졌을 때 DMA가 직접 memory에 copy => interrupt 발생.
휘발성, CPU 접근 가능
비휘발성, I/O, file system