운영체제

System Structure & Program Execution

매일_공부 2024. 5. 9. 15:57
반응형

컴퓨터 시스템 구조 및 프로그램 실행


Mode Bit

 

   사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치 필드

 

  mode bit를 통해 하드웨어적으로 두가지 모드의 operation(운영)을 지원한다.

 

1 사용자 모드 사용자 프로그램 수행
0 모니터 모드 OS 코드 수행

.

  보안을 해칠 수 있는 중요한 명령어는 모니터 모드 (= 커널모드, 시스템 모드) 에서만 수행 가능한 "특권명령"으로 규정

 

  Interrupt 나 Exception 발생시 하드웨어가 mode bit을 0으로 바꾼다.

 

  사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 세팅한다.

 

 

 

 


타이머 (Timer)

 

  정해진 사간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터셉트를 발생시킨다.

 

  타이머는 매 쿨럭 틱마다 1 감소한다.

 

  타이머 값이 0이되면 "타이머 인터럽트"를 발생한다.

 

  CPU를 특정 프로그램이 독점하는 것으로부터 보호한다.

 

  타이머는 time sharing을 구현하기 위해 널리 사용되머, 현재 시간을 계산하기 위해서도 사용한다.

 

 

 

 


Device Controller

  Device driver (장치 구동기)

 

  OS 코드 중 각 장치별 처리루틴  => software

 

  Device Controller (장치 제어기)

 

  각 장치를 통제하는 일종의 작은 CPU => hardware

 

 

 

  I/O device Controller

 

  해당 I/O 장치 유형을 관리하는 작은 CPU

  

  제어 정보를 위해 control register, status register를 가진다.

 

 

   CPU가 메모리와 통신하기 위해 MAR, MDR이라는 인터페이스가 존재하는 것처럼, I/O 장치도 외부 장치와 통신하기 위 해 인터페이스 역할을 하는 레지스터가 존재야 한다. 어떤 인터페이스가 있어야 할까?

 

   대략 다음과 같이 세 가지 정도를   생각해볼 수 있다.

 

   ① 데이터를 주고받기 위한 인터페이스 : 데이터 레지스터 (Data Register)

 

   ② CPU가 I/O 장치에 명령을 내리기 위한 인터페이스 : 컨트롤 레지스터 (Control Register) 

 

   ③ I/O 장치의 준비 상태를 나타내기 위한 인터페이스 : 상태 레지스터 (Status Register)

 

 

 

예를 들어, 특정 값을 출력하고 싶은 경우를 생각해 보자. 그러면 먼저 CPU는 해당 출력 장치의 상태 레지스터 값을 확인하여 데이터를 전달해도 되는 상황인지(즉 출력 장치가 데이터를 받을 준비가 되었는지) 판단한다. 전달해도 되는 상황이면 데이터 레지스터에 출력할 값을 쓰고, 그 값을 어떻게 출력할지에 대한 명령 정보를 컨트롤 레지스터에 쓸 것이다. 그러면 출력 장치는 그 데이터를 받아서 명령받은 대로 출력 동작을 수행하게 될 것이다.

 

 

   I/O는 실제 device와 local buffer 사이에서 일어난다.

 

  로컬 버퍼 (Local buffer)

  • 각 장치마다 제어하기 위해 설치된 장치 컨트롤러에 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리
  • 디스크나 키보드 등에서 데이터를 읽어오는 경우, 우선 로컬 버퍼에 데이터가 임시로 저장된 후 메모리가 전달된다.
    이 때, 장치에서 로컬 버퍼로 읽어오는 일은 컨트롤러가 담당한다.

  Device Controller는 I/O가 끝났을 경우, Interrupt로 CPU에 그 사실을 알린다.

 

 

 

 

 


인터럽트 (Interrupt)

  인터럽트 당한 시점의 레지스터와 program counter를 save 한 후, CPU의 제어를 인터럽트 처리 루틴에 넘긴다.

  

 

 

   Interrupt (하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트

 

   Trap (소프트웨어 인터럽트) 

 

     Exception : 프로그램이 오류를 범한 경우

 

     System call : 프로그램이 커널 험수를 호출하는 경우, 사용자 프로그램이 운영체제의 서비스를 

받기 위해 커널 함수를 호출하는 것

 

 

 

 


 

      인터럽트 관련 용어

 

       인터럽트 백터 : 해당 인터럽트의 처리 구현 주소를 가지고 있음

 

     

       인터럽트 처리 루틴 ( = Interrupt Service Routine : 인터럽트 핸들러)

       

         해당 인터럽트를 처리하는 커널 함수

 

 

 

 

 

 

 


 

입출력의 수행

 

  모든 입출력 명령은 "특권 명령" (모드 비트를 0으로 만듬) 이다.

 

  사용자 프로그램은 어떻게 I/O를 할까?

 

 

   1. 시스템 콜 (System Call) : 사용자 프로그램은 운영체제 (OS) 에게 I/O를 요청한다.

 

   2. Trap (소프트웨어 인터럽트)를 통해 인터럽트 백터의 특정 위치로 이동한다.

 

   3.  제어권이 인터럽트 백터가 가르키는 인터럽트 서비스 루틴 (인터럽트를 처리하는 커널 함수)로 이동한다.

 

   4.  올바른 I/O 요청인지 확인 후 I/O 수행

 

   5.  I/O 완료시 제어권을 시스템 콜 다음 명령으로 옮긴다.

 

 

     

 


 

 

동기식 입출력, 비동기식 입출력

 


동기식 입출력

 

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

 

 

  구현방법 1: 

    

    I/O가 끝날때까지 CPU를 낭비시킨다. 

 

    매 시점 하나의 I/O만 일어날 수 있다.

 

  구현방법 2:

  

    I/O가 완료될 때까지 해당 프로그램에서 CPU를 빼앗는다.

 

    I/O 처리를 기다리는 줄에 그 프로그램을 줄 세운다

 

    다른 프로그램에게 CPU를 준다.

 

 

 

 


 

 

비동기식 입출력

 

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

 

 

 

동기식, 비동기식 모두 I/O의 완료는 인터럽트로 알려준다.

   

 

 

 

 


DMA ( Direct Memory Access)

 

  빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용한다.

 

 

  CPU의 중재 없이 device controller(I/O의 작은 CPU) 가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송한다.

 

 

  바이트 단위가 아니라, Block 단위 로 인터럽트를 발생시킨다.

 

 

 

 

 

 

 

 


서로 다른 입출력 명령어

 

 

CPU 와 Device의 IO Controller를 이용한 연결
CPU 와 Device의 IO Controller를 이용한 연결

 

 

  

 

  I/O Device Controller는 레지스터를 갖고 있는데, (데이터, 컨트롤, 상태 레지스터)

 

  OS나 CPU가 Memory에 있는 값을 레지스터에 써주면 디바이스가 작동한다. 

 

 

 IO Deivce가 동작하는 방법은 한가지이다

  레지스터에 쓰여 있는 값을 읽어서 동작한다.

 

 

그러나 동작 시키는 방법 (레지스터에 접근하는 방법)은 여러가지이다.

 

 


I/O를 수행하는 Special Instruction에 의해

 


  Direct IO

 

   CPU가 장치의 레지스터에 직접 명령을 작성해서 I/O 명령을 내린다.

 

     특정 IO 레지스터에 접근하기 위한 명령어가 따로 존재한다. 


CPU가 디바이스에게 Direct IO 정보를 넘겨준다.

 

  각 deivce controller register에 포트 번호 주소가 할당이 된다 .(by OS)

 

  control / data byte / word를 컨트롤 라인을 통해 포트로 바로 전달하기 위해 특별한 IO instruction을 사용한다.

 

 

 

  데이터를 전송하는데 느리다.

  

  큰 데이터가 요구하는 device에서 효율 X

 

 

 

 

 

 

 


 

Memory Mapped I/O에 의해

 

Device control 레지스터가 메모리 주소 공간에 매핑
Device control 레지스터가 메모리 주소 공간에 매핑

  Device control 레지스터가 메모리 주소 공간에 mapping 된 것. 

  따라서 CPU는 메모리의 mapping 된 위치에서 읽기/쓰기를 통해 I/O 요청을 실행한다.

 

 

  메모리의 주소 중 일부를 IO 레지스터에게 부여한다.

  

    메모리 주소만 부여할 뿐, 실제로(물리적으로) IO 레지스터는 메모리와 독립되어 IO 장치 안에 들어 있다.

 

    다만 해당 I/O 레지스터에게 부여된 메모리 주소로 접근을 시도하면, 메모리가 아닌 그 I/O 레지스터에게 접근

하게끔 구현되어 있다.

 

 

  즉, 메모리에서 데이터를 읽는 명령어와 메모리에 데이터를 쓰는 명령어를 그대로 사용하여, 특정 I/O 레지스터에 

접근한다.

 

 

 


커널 주소 공간의 내용

CODE (CPU에서 실행할 기계어 code) DATA (변수) STACK (데이터를 넣고 꺼내기 위함)
커널 코드

시스템콜, 인터럽트 처리 코드

자원관리를 위한 코드

편리한 서비스 제공을 위한 코드
프로세스마다의 Process Control Block

CPU, Memory, Disk를 관리하기 위한 
자료구조
ProcessA의 커널스택
ProcessB의 컨널스택
....
...

 

 

 

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


  사용자 정의 함수

    자신의 프로그램에서 정의한 함수

 

 

  라이브러리 함수

    자신의 프로그램에서 정의하지 않고, 갖다 쓴 함수

 

    자신의 프로그램의 실행 파일에 포함되어 있다.

 

 

 

  커널 함수

    운영체제 프로그램의 함수,

 

    커널 함수의 호출 = 시스템 콜

    

 

 

출처

https://it-eldorado.tistory.com/24

https://velog.io/@sparkbosing/%EB%A1%9C%EC%BB%AC-%EB%B2%84%ED%8D%BC

https://velog.io/@dewgang/IO-Device-Communication

이화여자대학교 운영체제 반효경 교수님 : http://www.kocw.net/home/cview.do?lid=af8e05c97c6d60de

 

운영체제

운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

www.kocw.net

 

 

반응형