[운영체제] 컴퓨터 시스템 동작 원리(2)

covy·2024년 1월 11일

CS) 운영체제

목록 보기
3/7

입출력 구조

입출력(I/O)란 컴퓨터 시스템이 컴퓨터 외부의 입출력 장치들과 데이터를 주고받는 것을 말함

입출력 방식은 동기식 입출력, 비동기식 입출력 두가지로 나뉨
각각 자세히 알아 보도록 하자

동기식 입출력

  • 어떤 입출력 작업이 완료된 후에야 그 프로그램이 후속 작업을 수행함

  • 시나리오

    1. 입출력이 완료되기까지 어느 정도 시간이 소요되는데 이 때 프로그램의 다음 명령을 수행하지 않고 기다린다.
    2. 입출력이 완료 된 후에야 CPU 제어권이 프로그램에 넘어가서 다음 명령을 수행할 수 있음
  • CPU의 명령 수행 속도는 빠르나 입출력 장치에서 데이터를 읽어오는 등의 입출력 연산은 상대적으로 느림

  • CPU가 아무일도 하지 못하는 자원 낭비가 심한 문제가 있음 (어떻게 해결할 수 있을까?)

    1. A가 할당받은 CPU를 다른 프로그램 B에 이양함
    2. B가 CPU를 할당받아 명령을 수행아고, 프로그램 A의 입출력이 완료될 때까지 A에게 CPU를 다시 할당하지 않는다
      • 할당받더라도 다음 명령을 수행 못하기 때문 이를 위해서 운영체제는 프로그램의 상태를 몇가지로 구분한다.
      • 입출력인 경우 봉쇄상태(blocked state)로 전환시킨다
    3. 봉쇄상태가 아닌 프로그램에게 CPU를 할당한다.

하지만 문제가 또 있다.

입출력이 수행 중일 때는 다른 프로그램에게 CPU를 양도하게 되므로 다수의 입출력이 동시에 요청된다. 이 때 동기성을 보장하기 어려운 문제가 생긴다.

예시를 들자면 아래와 같다.

1. A프로그램에서 디스크 '1'이라는 파일의 내용을 3으로 바꾸는 입출력 연산을 요청했다
2. 이 때 연산을 수행 중이던 A의 CPU를 프로그램 B에게 할당했다고 하자
3. B가 공교롭게도 같은 파일을 1증가시키는 작업을 한다
4. 이 때 값은 1 -> 3 -> 4가 아닌 1 -> 2 -> 3이라는 결과를 얻게 된다.

위처럼 예상치 못한 결과를 얻을 수 있기 때문에 입출력 장치 동기화를 위해 각 장치별로 queue를 두어 요청한 순서를 보장할 수 있게 한다.

비동기식 입출력

  • 입출력 연산은 요청한 후에 연산이 끝나기를 기다리는 것이 아닌 입출력 연산을 호출한 후 곧바로 프로그램이 CPU의 제어권을 부여받는 방식
  • 입출력 연산이 완료되는 것과 무관하게 처리 가능한 작업부터 처리한다.

입출력 방식


DMA (Direct Memory Access)

CPU외에 메모리에 접근이 가능한 장치이다. 일종의 컨트롤러로서, CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 되는 것을 막아주는 역할을 한다.

  • 원칙적으로 CPU만 메모리에 접근할 수 있으므로 Memory는 CPU에게 인터럽트를 발생시켜서 CPU가 접근하게 할 수 있다. 이는 CPU 사용의 효율성이 떨어지는 문제점이 있는데, 이를 해결하기 위한 장치.
  • 메모리로 읽어오는 작업을 CPU가 담당하는 것이 아닌 DMA가 대행하여서 처리
  • byte가 아닌 block 단위를 사용한다.

DMA를 사용하는 기준에는 데이터 전송량이 큰 경우, 속도와 효율성, 멀티테스킹 및 병렬 처리, 입출력 처리가 있다고 한다.

저장장치 계층구조

저장장치 계층구조

  • 캐싱 기법을 통해 속도가 빠른 저장장치를 사용하여 느린 저장장치의 속도를 완충시킬 수 있다.

하드웨어의 보안

흔히 사용하는 운영체제는 여러 프로그램이 동시에 실행될 수 있는 다중 프로그래밍 환경에서 동작한다.
이 때 한 프로그램이 다른 프로그램의 실행을 방해하거나 충돌을 일으킬 수 있다.

이 때 하드웨어적인 보안을 유지하기 위해 운영체제는 커널모드 , 유저모드 두 가지 모드를 지원한다.

커널모드

  • 운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행하는 모드, 모든 종류의 명령을 다 실행할 수 있다.
  • 시스템에 중요한 영향을 미치는 연산을 할 수 있다. (특권명령)
  • modebit 값이 0

유저모드

  • 제한된 명령을 수행할 수 있다.
  • modebit 값이 1
  • 입출력 등 특권명령이 필요할 때는 시스템 콜을 발생시켜서 운영체제가 담당하게 한다.

시스템 콜

운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 이를 거쳐서 호출하도록 설게되었음

  • 시스템 콜의 과정
    1. 유저 프로그램이 I/O 요청 트랩발동됨
    2. 올바른 I/O 요청인지 확인
    3. 유저 모드가 시스템콜을 통해 커널모드로 변환
    4. 이후 커널함수를 실행

0개의 댓글