반효경 교수님의 운영체제 강의를 듣고 정리한 게시글입니다.
두 경우 다 I/O의 완료는 인터럽트로 알려줌
I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
1. 구현 방법 1:(Programmed I/O)
2. 구현 방법 2:(Interrupt-driven I/O)
I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
CPU와 입출력 장치들이 I/O Bus, CPU와 메모리는 메모리 Bus를 통해 연결되어있다.
I/O instruction이 명령어 집합(Instruction Set)에 따로 추가되므로 제어로직이 복잡해지고, I/O Bus를 장착하는데 추가 비용이 든다.
입출력 장치들이 메모리와 함께 메모리 Bus에 연결되어 있어 입출력을 위한 instruction을 따로 두어 사용하지 않고, 메모리에 대한 명령어를 사용하여 입출력을 하는 방식
입출력 장치들이 각각 메모리의 번지를 할당받아 그 주소 공간만큼의 메모리를 활용할 수 없는 단점.
밑으로 갈수록 용량은 크고, 속도가 느리고, 비용은 낮아진다.
Primary : CPU에서 직접 접근, Volatile(휘발성)
Secondary : CPU에서 직접 접근 X, Non-volatile(비휘발성)
💡 캐싱(Chaching)?
속도 차이를 완충하기 위해서 당장 필요한 정보나 자주 사용되는 정보를 저장해놓는 것, 재사용을 목적으로.
프로그램이 File System에 실행 파일 형태로 저장되어 있고, 프로그램을 실행하면 메모리에 올라가 프로세스가 된다.
프로그램이 메모리에 바로올라가는 것이 아니라 Virtual Memory를 거친다.
프로그램을 실행시키면 그 프로그램의 독자적인 Address Space(메모리 주소 공간)이 형성되고 Code, Data, Stack
영역으로 구성되어 있다.
CPU에서 실행할 기계어 코드
전역 변수같은 프로그램이 사용하는 자료구조
Code가 함수 구조로 되어있기 때문에 함수를 호출하거나 리턴 시 데이터를 임시로 저장하는 용도로 사용하는 곳
Virtual Memory에서 주소 변환(Address translation)을 통해 당장 필요한 부분만 물리적인 Memory에 올려 사용하고, 그렇지 않은 부분은 Disk의 Swap area에 내려 놓는다.
💡 Swap area?
메모리 용량의 한계로 연장 공간으로써 디스크에서 사용하는 부분으로 전원이 나가면 내용이 사라진다.
커널 주소 공간도 마찬가지로 Code, Data, Stack
으로 구성되어있다.
하드웨어와 프로세스를 관리하기 위한 자료 구조
프로세스를 관리하기 위한 자료 구조인 프로세스 제어 블록인 PCB(Process Control Block)
OS 역시 함수 구조로 되어있기 때문에 함수 호출하거나 리턴 시 필요한 공간
자신의 프로그램에서 정의한 함수
자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
자신의 프로그램 실행 파일에 포함되어 있다.
운영체제 프로그램의 함수
커널 함수의 호출 = System Call
유저 모드에서 사용자 정의함수나 라이브러리 함수를 호출하다가 System Call을 하여 커널 함수를 호출하면 커널 모드로 CPU가 동작하고, 끝나면 다시 유저 모드로 CPU가 동작한다.
[보충 참고자료]
김주균, OS? Oh Yes! 누워서 보는 운영체제 이야기