어플리케이션과 하드웨어의 추상화를 제공한다.
저장소에 대한 추상화로 '파일 시스템'을, 네트워크에 대한 추상화로 '소켓'을, 메모리에 대한 추상화로 '가상 메모리' 를 제공하는 것이 좋은 예이다.
유저모드와 커널 모드가 존재.
명령어를 파이프라이닝을 통해서 가져오고, 실행한다.
CPU 레지스터에는 프로그램 카운터, 스택 포인터 등의 레지스터가 존재한다.
외부 입력장치로 인한 입력이 들어오게 되면, CPU는 현재 하던 Process를 멈추고 인터럽트 벡터에 따라서 현재 인터럽트 루틴을 처리하게 된다.
아래의 코드를 생각해 보자
int main(){
char buffer[100];
fp = fopen();
fscanf(fp,buffer);
read(fp,buffer);
}
file system을 통해서 파일을 open 후 , buffer에 넣어주기 위해서는 system call이 필요하다. 인터럽트나 system call을 하게 되면, 커널 모드로 전환되게 된다.
프로세스는 block되며, 위의 그림의 오른쪽과 같이 handler에 의해서 이벤트가 처리되고 다시 프로세스는 running이 되게 된다.
만일 프로세스가 I/O 장치의 접근이 필요하다면 3가지 선택지가 존재한다.