[OS] System Structure & Program Execution 2

밈무·2022년 11월 10일
0

운영체제

목록 보기
2/15
post-custom-banner

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


⇒ 두 경우 모두 I/O 완료는 (하드웨어)인터럽트로 알려줌! (그림에서 각 경우의 가장 오른쪽 화살표가 끝나는 지점이 I/O 완료 시점)

사용자가 입출력 요청을 하면
동기식 입출력에서는 먼저 운영체제의 커널로 CPU의 제어권이 넘어와서 입출력 처리와 관련된 커널 코드가 수행된다. 이때 입출력을 호출한 프로세스의 상태를 blocked 상태로 바꾸어 입출력이 완료될 때까지 CPU를 할당 받지 못하도록 한다. 입출력이 완료되면 I/O 컨트롤러가 CPU에게 인터럽트를 발생시켜 입출력이 완료되었음을 알려주고, Blocked 상태인 해당 프로세스에게 CPU를 할당 받을 수 있는 권한을 준다(=CPU를 할당 받을 수 있는 줄에 서게 될 수 있다는 의미).

반면 비동기식 입출력에서는 CPU의 제어권이 입출력을 요청한 프로세스에게 곧바로 다시 주어지며, 입출력 연산이 완료되는 것과 무관하게 처리 가능한 작업부터 처리한다.

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

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어간다.(I/O요청이 다 끝나야 사용자 프로그램이 다른 일을 할 수 있음)
  • I/O 작업이 완료된 것을 직접 확인하고 작업 : synchronous read, synchronous write
    • read는 synchronous인 경우가 많다.

    • 내 프로그램에 제대로 write가 완료 되었는지 확인하고 그 다음 작업을 하고 싶을 때 synchronous write

      → 서로 같은 I/O 작업 결과를 보고 있다는 것을 보장한다.

구현방법

  • 구현방법1 ⇨ 낭비되는 방법
    • I/O가 끝날 때까지 아무 일도 안하고 기다려서 CPU 낭비시킨다.
    • 매 순간에 하나의 I/O만 일어날 수 있다.(I/O장치 낭비)
  • 구현방법2 ⇨이 방법으로 구현!
    • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗는다.
    • 입출력 처리를 기다리는 줄에 그 프로그램을 세운다.
    • 다른 프로그램에게 CPU 제어권을 넘긴다.
    • CPU와 I/O장치의 낭비가 없다

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

비동기식 입출력은 I/O 작업의 종료가 끝나는 것을 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어가는 것을 말한다.(입출력 작업이 다 안 끝나도 다른 일 할 수 있다.)

  • asynchronous read, asynchronous write
    • I/O 결과의 데이터와 상관 없는 작업인 경우 asynchronous read
    • write는 asynchronous인 경우가 많음

입출력 명령어

I/O는 일반적인 I/O 방식과 Memory Mapped I/O 방식이 있다.

(좌측 : 일반적인 방식 / 우측 : Memory Mapped I/O)

일반적인 I/O

special instruction으로 I/O를 수행한다. 메모리에 접근하는 명령과 I/O 장치에 접근해야 하는 명령이 구분되어 있다.
그림에서 알 수 있듯, 메모리 주소와 I/O 디바이스 주소 및 instruction이 별개이다.

Memory Mapped I/O

I/O장치도 메모리 주소로 붙인다.
예를 들어 100번지에 접근하는 것은 일반 메모리에 접근하는 것이지만 1000번지에 해당하는 메모리에 접근하는 명령은 I/O를 하기 위한 명령이다.

저장장치 계층 구조


위로 갈수록 빠르고, 비싸고, 용량이 적다.
반대로 아래로 갈수록 느리고, 싸고, 용량이 많다.

primary

  • 휘발성이다.

  • CPU가 직접 접근해서 처리할 수 있다(=Executable하다)

    • Byte 단위로 접근이 가능해야 한다.(!= 섹터단위로 접근)
  • Caching : 재사용을 목적으로 이전에 접근했던 것과 같은 것을 또 읽어오기 위함

    • Cache Memory를 통해 CPU가 접근하는 시간을 단축한다. CPU와 메인 메모리의 속도 차이를 완충할 수 있다. 용량이 적기 때문에 모든 것을 담아둘 수는 없지만 빈번히 사용되는 필요한 정보를 선별적으로 저장하여 재사용함으로써 시스템 성능을 높일 수 있다.

Secodary

  • 비휘발성
  • CPU가 직접 접근해서 처리할 수 없다.
  • 하드 디스크의 단위는 섹터단위이므로 CPU가 직접 접근하지 못한다.

프로그램의 실행

메모리 load

  • 실행파일을 실행시키면 각 프로세스마다 (0번지부터 시작하는) virtual memory독자적인 주소공간이 생김

    • code : CPU에서 실행할 기계어 코드
    • data : 전역변수, 자료구조
    • stack : 코드가 함수구조라 호출이나 리턴 시 사용
  • 위에 생긴 주소공간 중 당장 필요한 부분(당장 실행되는 코드만)만 physical memory에 올려둠

  • 당장 필요하지 않은 부분은 swap area에 내려 둠

  • 커널 주소 공간은 항상 physical memory에 상주

  • Swap area 는 메모리 용량의 한계로 메모리 연장 공간으로 사용하기 위함이며, 컴퓨터 전원이 꺼지면 안의 데이터 날라감(휘발성)

  • File System은 file 저장 위한 하드웨어로 전원이 꺼져도 데이터 유지(비휘발성)

  • Address translation : 하드웨어의 지원을 받아서 logical 주소에서 physical 주소로 바꿔줌

프로그램 A관점에서의 그림

프로그램 A관점에서의 그림

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

함수

프로세스(내 프로그램)의 주소공간의 코드에 포함되어 있는 함수

  • 사용자 정의 함수

    • 내가 직접 프로그램에서 정의한 함수
  • 라이브러리 함수

    • 자신이 프로그램에서 정의하지 않고 갖다 쓴 함수
    • 자신의 프로그램의 실행파일에 포함되어 있음

    ⇨시스템 콜 없이 점프해서 주소 이동 가능

커널 주소 공간 코드에 포함되어 있는 함수

  • 커널 함수
    • 운영체제의 프로그램의 함수
    • 커널 함수의 호출 = 시스템콜

http://www.kocw.net/home/cview.do?cid=3646706b4347ef09
https://steady-coding.tistory.com/513

post-custom-banner

0개의 댓글