시스템 구조&프로그래밍 실행1

Sirius·2023년 2월 15일

OS의 목표

1) 컴퓨터 시스템의 자원을 효율적으로 관리

1> 실행중인 프로그램들에게 짧은 시간씩 CPU를 번갈아 할당
2> 실행중인 프로그램들에 메모리 공간을 적절히 분배

2) 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공

컴퓨터 시스템 구조

1) CPU

쉬지않고 일한다 즉 메모리에서 instruction을 읽어서 실행하고 또 실행한다.

  • CPU의 소유권

    1) OS 혹은 2) 사용자 프로그램이 가진다.

2) Timer

한 프로그램의 독점을 막는다.
정해진 시간이 흐른뒤 OS에 제어권을 넘기도록 인터럽트를 발생시킨다.
세팅시간 3 -> 2 -> 1 -> 0(인터럽트 발생)
인터럽트가 발생하면 CPU를 뺏는다.

3) modebit

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

1> modebit=0

OS가 CPU 실행한다. I/O Device에 접근, 메모리에 접근 등 제약없이 거의 다 가능하다.

즉 인터럽트나 Exception 발생시 하드웨어가 mode bit를 0으로 바꾼다(커널모드)

2> modebit=1

사용자프로그램이 CPU를 실행한다.
OS가 CPU를 실행하는 것과 다르게 제한이 걸린다.(보안의 문제)

만약 다시 사용자 프로그램에게 CPU를 넘기면 mode bit를 1로 셋팅한다(유저모드)

4) Device Controller(I/O장치를 전담하는 작은 CPU, HardWare)

Device Controller는 I/O가 끝났을 경우에 인터럽트로 CPU에 그 사실을 알린다.(HW인터럽트)
제어정보를 위해 control register, status register를 가진다.
데이터를 저장하는 local buffer도 가진다.

5) DMA Controller

  1. I/O 장치가 인터럽트를 너무 자주걸어서 CPU가 방해받는 현상이 일어난다.(DMA 컨트롤러가 필요한 상황)

  2. I/O의 작업이 끝나면 DMA controller가 local buffer에 있는 내용을 메모리에 복사한다. local buffer에는 I/O디바이스의 그동안의 작업이 쌓인다.

  3. 작업이 다 끝나면 CPU에 인터럽트를 한번만 건다.(CPU야 메모리에 다 올려놓았어!)

즉 CPU가 데이터를 메모리에 옮기지 않고 DMA 컨트롤러가 데이터를 메모리로 옮긴다. CPU가 할일을 대신함.

CPU, Device Controller, DMA Controller의 접근

1) CPU는 메모리와 local buffer(I/O)에 둘다 접근 가능하다.

2) Device Controller(I/O)는 local buffer(I/O)에만 접근이 가능하다.
3) DMA Controller와 CPU는 메모리에 접근이 가능하다.

I/O의 수행

모든 입출력명령은 특권명령으로 OS를 통해서만 가능하다.

이런경우 System Call(프로그램이 직접 인터럽트를 거는 상황)이 발생한다.

I/O 요청을 위해 OS의 함수를 호출하려면 OS의 주소로 가야하지만 modebit가 1이기 때문에 불가능하다.
이런경우 프로그램이 직접 인터럽트 line을 셋팅하는 인스트럭션을 실행한다.(프로그램이 직접 인터럽트를 거는 상황)
-> 하드웨어가 modebit를 0으로 바꾼다.

인터럽트

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

1. HW 인터럽트

HW가 발생시킨 인터럽트(일반적인 인터럽트)

2. SW 인터럽트(=Trap)

1) Exception: 프로그램이 오류를 범한 경우
2) System Call: 프로그램이 커널 함수를 호출하는 경우

키보드와 I/O의 수행(총정리)

1. System Call 발생

키보드를 뚝딱이면 키보드 프로그램이 System Call(I/O명령은 특권명령으로 커널영역을 읽어야 함)발생시킴. System Call을 통해 인터럽트 벡터가 가리키는 어떤 루틴실행

2. OS가 올바른 요청인지 살펴보고 Device Controller(작은 CPU)에게 I/O를 지시

커널의 함수부분에는 Device Controller에게 I/O를 지시하는 인스트럭션이 있음

3. I/O작업을 Device Controller가 실행하여 키보드의 입력이 local buffer에 쌓임

키보드의 입력이 localbuffer에 쌓이면 이제 이 입력을 메모리공간에 올려놓아야함

4. DMA Controller가 local buffer의 내용을 메모리에 블록단위로 복사한다.

5. DMA Controller가 CPU에 HW인터럽트를 한번만 건다.

메모리에 다 올려놓았음!

6. CPU가 메모리를 보고 키보드의 입력데이터를 처리함

7. CPU는 입력 데이터 처리후 원래상태로 복귀

재미있는 FACT

OS(커널)는 평소에 CPU를 사용할 일이 없다. 오직 인터럽트가 오는 경우에만 CPU가 OS(커널)에게 넘어간다.
늘 사용자 프로그램이 CPU를 쓰고 있다.

인터럽트 관련 용어

OS를 만들면서 "이런 인터럽트가 들어오면 이런일을 해야함" 정의해 놓음

1. 인터럽트 벡터

각 인터럽트 종류마다 어디있는 함수를 실행해야 하는지 그 주소를 정의해놓음
ex>
1번 인터럽트-> func1
2번 인터럽트-> func2

2. 인터럽트 처리 루틴

각 인터럽트마다 처리해야 할 실제코드

0개의 댓글