본문 바로가기

CS/운영체제

[운영체제] 2. System Structure & Program Execution (2)

더보기

kocw 반효경 교수님의 운영체제 강의를 수강 후 작성한 글입니다.

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

- 동기식 입출력 (Synchronous I/O)

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
    • 구현 방법 1
      • I/O가 끝날 때까지 CPU를 낭비시킴
      • 매시점 하나의 I/O만 일어날 수 있음
    • 구현 방법 2
      • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
      • I/O처리를 기다리는 줄에 그 프로그램을 줄 세움
      • 다른 프로그램에게 CPU를 줌

동기식 입출력에서는 입출력 연산이 끝날 때까지 CPU는 아무 일을 수행할 수 없다. 기본적으로 CPU의 명령 수행 속도는 외부 장치에서 데이터를 읽어오는 등의 입출력 연산보다 상대적으로 빠르기 때문에 CPU가 입출력 연산을 기다리는것은 비효율적인 일 인 것이다. 

따라서 일반적으로 프로그램이 입출력을 수행중인 경우 CPU를 다른 프로그램에게 넘겨 CPU가 계속 쉬지 않고 일할 수 있도록 관리한다. (입출력을 수행하고있는 프로그램은 Blocked state가 됨)

Blocked state의 프로그램에게는 CPU를 할당하지 않고, CPU를 할당하면 곧바로 작업 수행 가능한 프로그램들에게만 CPU를 할당하도록 한다. 이때 I/O 장치 별로 큐를 두어 요청한 순서대로 처리할 수 있도록 한다.

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

I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

비동기식에서는 입출력 결과에 상관없이 수행할 수 있는 일들을 먼저 처리하고, 입출력의 결과가 필요한 프로그램들은 입출력이 완료된 후에 작업을 수행한다.

※ 두 경우 모두 I/O의 완료는 인터럽트로 알려줌

2. DMA (Direct Memory Access)

  • 빠른 입출력 장치(하드디스크, 대용량 메모리 장치 등)를 메모리에 가까운 속도로 처리하기 위해 사용 (인터럽트 발생을 줄여서 CPU를 더 효율적으로 사용할 수 있다.)
  • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
  • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴 (대용량의 data를 CPU 관여없이 옮길 수 있음)

3. 서로 다른 입출력 명령어

- I/O를 수행하는 special instruction 에 의해

LDA, STB 등 장치마다 다른 명령어 사용

- Memory Mapped I/O 에 의해

I/O Device를 모두 memory로 봄 -> 명령어를 공통적으로 사용 가능

4. 저장장치 계층 구조

5. 프로그램의 실행

디스크에 존재하는 프로그램을 실행시키기 위해서는 디스크의 실행파일을 메모리에 올려 CPU를 할당받아야 한다.

프로그램이 CPU를 할당받고 명령을 수행하고 있는 상태이며, 현재 수행 중인 프로그램을 프로세스라고 부른다.

프로세스는 바로 물리 메모리에 올라가는 것이 아니라, 독자적으로 Virtual Memory라는 가상 주소공간을 가진다.

 

  1. 각각의 프로세스가 독자적인 메모리 주소공간(code, data, stack 영역)을 가짐
    • code - 기계어 코드
    • data - 전역 변수 / 자료구조
    • stack - 지역 변수 / 함수 호출과 리턴
  2. 각 프로세스의 가상 주소공간에서 실제로 프로그램을 실행하는데 필요한 부분은 block단위로 물리 메모리에 올라간다. 만약 물리 메모리에 block을 올릴 수 있는 자리가 부족하게 되면 swap area라는 디스크영역에 block을 잠시 보관한다. (각 프로세스 가상주소 공간의 block을 물리 메모리로 올릴 때 주소를 변환하여 올림)

- 커널 주소 공간의 내용

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

함수 (fuction)

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