sw사관학교정글/OS 개념정리

[week08] KOCW 운영체제(반효경교수님) - System Structure & Program Execution 2

D cron 2021. 12. 30. 16:29

동기식 입출력과 비동기식 입출력



동기식 입출력(synchronous I/O)

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감

비동기식 입출력(asynchronous I/O)

  • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
  • 두 경우 모두 I/O의 완료는 인터럽트로 알려줌
  • 요청하고 CPU가 다른 instruction을 실행할 수 있으면 비동기, 아니면 동기다.

DMA(Direct Memory Access)

CPU가 interrupt를 너무 많이 당한다. → CPU 효율성 떨어짐

memory에 접근할 수 있는 controller

DMA가 직접 interrupt를 처리한다.

  • device controller가 buffer에 한 block이나 page정도의 양의 data가 쌓이면
  • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
  • CPU에게 interrupt를 걸어서 메모리에 올라왔다고 보고

서로 다른 입출력 명령어


I/O를 하는 방법은 2가지가 있다.

일반적인 경우(좌측)

  • 메모리만 접근하는 명령어, I/O만 접근하는 명령어가 나눠져있는 경우
    • I/O를 수행하는 special instruction을 통해 I/O device에 접근

Memory Mapped I/O(우측)

  • I/O device들에다가 메모리 주소를 매겨서 memory 접근 instruction을 통해 접근 가능

저장장치 계층 구조


위로 갈수록 속도가 빠르고, 단위공간당 가격 비쌈

volatile: 휘발성 물질(연두색 부분)

CPU가 직접 제어 가능한 부분: primary(executable)

  • byte단위로 접근 가능

secondary 부분: byte단위로 접근 불가능(sector단위 접근)

Caching

  • 재사용을 통해 더 빠르게 동작하기 위해 사용
  • 빠른 storage system으로 정보를 복사

프로그램의 실행(메모리 load)

프로그램이 어떻게 컴퓨터에서 실행될까?

프로그램은 실행파일의 형태로 disk에 저장됨, 실행시키게 되면 메모리로 올라가고, 프로세스가 된다.


프로그램을 실행시키면 프로그램만의 독자적인 메모리 주소공간(Address space)이 형성됨

  • 주소공간은 code, data, stack으로 구성
  • 사실 이 주소공간은 머릿속에만 존재한다는 의미에서 Virtual Memory라고 함
  • 이 독자적인 주소공간을 모두 다 물리적인 메모리 공간에 올리지 않고 필요할때마다 사용한다.
  • 지금 사용하지 않는 부분은 disk의 swap area에 저장됨(내린다고 표현)
  • swap area로 사용하는 하드디스크는 전원이 나가면 없어진다.
    • 메모리 연장공간으로써 사용한다.
    • 오른쪽에 file system을 저장하는 disk와 다르다(disk는 비휘발성).

커널 주소 공간의 내용


code

  • 어떤 인터럽트가 들어오면 어떤 동작을 처리하는지에 대한 코드가 커널코드에 적혀있다.

data

  • PCB(Process Control Block)
    • 프로그램이 하나 실행되면 그 프로그램을 관리하기위한 자료구조가 커널에 만들어지게 된다.

stack

  • 여러 사용자들의 프로세스들은 system call을 통해 커널 코드를 요청해서 사용한다.
  • 운영체제도 함수 구조로 코드가 작성되어 있기 때문에 함수를 호출하거나 return할 때 stack영역을 사용해야 한다.
  • 사용자 프로그램마다 kernel stack을 따로 둔다.
    • stack에서 어떤 process가 커널 함수를 사용했는지 stack에 저장한다.

사용자 프로그램이 사용하는 함수

사실 모든 프로그램은 함수 형태로 작성된다.

함수

  • 사용자 정의 함수
    • 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수
    • 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
    • 자신의 프로그램의 실행 파일에 포함되어 있음
  • 커널 함수
    • 운영체제 프로그램의 함수
    • 커널 함수의 호출 = system call