동기식 입출력 (Synchronous I/O)
sync -> 시간적으로 서로 맞춘다 !! 립싱크할때의 그 싱크를 생각해보면 쉽다.
I/O 요청 후 입출력 작업이 모두 완료 된 후에 CPU 제어가 사용자 프로그램에 넘어간다.
구현 방법 1
- I/O 끝날때까지 CPU를 낭비시킨다. -> 한번에 하나의 I/O만 일어난다.
구현방법 2 -> 보통 동기식 입출력을 구현하는 방식
- I/O 가 완료될 때까지 해당 프로그램에게서 CPU빼앗고 I/O 처리를 기다리는 줄에 그 프로그램이 대기한다.
- 다른 프로그램에게 CPU를 준다.
- ex) 정말로 스토리지에 결과값이 잘 write되었는지 확인해야만 다음 작업을 할 수 있는 경우 동기식으로 수행해야 할 것이다.
비동기식 입출력 (Asynchronous I/O)
I/O가 시작된 후 입출력 작업 끝나기를 기다리지 않고 사용자 프로그램에게 CPU 제어권이 즉시 넘어간다.
즉, 입출력 작업 결과랑 상관없이 할 수 있는 작업들을 하도록 프로그램을 수행하는 것이다.
ex) write 작업의 경우 수행결과를 실제로 쓰지 않더라도 그 다음 작업을 수행할 수 있다.
동기식 입출력과 비동기식 입출력 모두 I/O 작업의 완료는 CPU에게 인터럽트로 알려주게 된다.
DMA (Direct Memory Access)
DMA 는 이름그대로 CPU처럼 메모리를 접근할 수 있는 장치이다.
local buffer 에 어느정도 데이터가 쌓이면 DMA가 Memory에 복사를 해온 후, I/O 작업 처리가 끝났다고 DMA는 CPU에게 알려준다.
저장장치 계층 구조
Primary 로 표시된것이 보통 휘발성, Secondary 로 표시된 저장장치들이 보통은 비휘발성이다. 계층구조 위로갈수록 빠르고 비싸다.
Register와 Main Memory 사이의 속도차이를 완충하기 위해서 Cache를 사용한다. 즉, 다른 매체로 정보를 읽어들여서 쓰는 것을 캐싱이라고 한다. 보통 재사용의 목적으로 사용하게 된다.
프로그램의 실행
프로그램을 실행시키게 되면, 그 프로그램의 주소 공간 (address space)가 형성된다. 이는 메모리 주소공간이다. 0번지부터 시작하는 그 프로그램만의 독자적인 주소공간이 생기게 된다. 각 프로그램마다 만들어지는 주소 공간은 code, data, stack으로 구성되어 있다.
당장 실행에 필요한 부분에 해당하는 코드만 memory에 올려서 메모리 낭비를 방지한다. 당장 필요하지 않은 부분은 disk 에 있는 swap area에 올려놓게 된다.
전원이 나가더라도 file 내용 (프로그램 내용)은 유지해야 하므로 Disk 를 사용한다.
커널 주소 공간
코드
- 자원을 효율적으로 관리하기 위한 코드
- 서비스 제공을 위한 코드
- 인터럽트 처리 코드
데이터
- PCB : Process Control Block 으로, 시스템 안에 프로그램이 메모리 상에 올랐을 때 프로세스가 된다. 이 프로세스를 관리하기 위한 공간이 PCB이다.
스택
- 함수를 호출하거나 리턴할 때 스택 자료구조를 사용한다. 커널 또한 함수들로 이루어져있으므로 스택이 필요하다.
함수의 종류
- 사용자 정의 함수 : 사용자가 프로그램에서 정의한 함수
- 라이브러리 함수 : 자신의 프로그램에서 정의하지 않고 이미 만들어 놓은 것을 가져다 쓰는 함수
- 커널 함수 : 운영체제 프로그램의 함수. 커널 함수가 호출되는 것이 시스템 콜이다. Kernel 주소 공간의 Code 영역에 정의되어 있다.
프로그램의 실행
system call 이 호출되면 user mode 에서 kernel mode로 전환되는 것을 확인할 수 있다. kernel 은 kernel 주소공간에 있는 code를 실행할 것이다. 프로그램은 user mode와 kernel mode를 반복하여 실행하다가 작업을 마치고 종료된다.
반효경 교수님의 운영체제 강의를 듣고 정리한 내용입니다. 정말 잘가르치십니다.. 운영체제가 이런거였나?! 싶을정도로요..
'Computer Science > 운영체제' 카테고리의 다른 글
[OS] 운영체제 5.2 CPU Scheduling (0) | 2023.05.28 |
---|---|
[OS] 운영체제 5.1 Process (0) | 2023.05.22 |
[OS] 운영체제 3. 컴퓨터 시스템 구조 (0) | 2023.05.20 |
메모리의 구조 (Memory Structure) (0) | 2023.04.03 |
[운영체제] Process와 Thread의 차이 (0) | 2023.03.30 |