[OS] 2. System Structure & Program Execution 1

nang_zz·2022년 10월 5일
0

운영체제

목록 보기
2/3
post-thumbnail

반효경 교수님의 운영체제 강의를 듣고 정리한 게시글입니다.


컴퓨터 시스템 구조

Memory

CPU의 작업공간

Device Controller

각 I/O device에 붙어있는 일종의 작은 CPU로 각 장치들을 제어.
I/O 요청이 들어오면 CPU가 직접 읽어오는 것이 아닌 Device controller에게 시키고 device controller가 해당 값을 자신의 local buffer에 저장해 놓는다.

💡 Device driver(software)
OS 코드 중 각 device를 처리하기 위한 routine

Local buffer

CPU도 작업 공간인 메인 메모리가 있듯이 각 Device Controller들도 작업 공간이 필요한데 이를 Local buffer라 부른다.

CPU

매 클럭마다 메모리에서 Instruction을 하나씩 읽어 수행

Register

CPU 내부에 메모리보다 빠르면서 정보를 저장할 수 있는 작은 공간으로 처리할 명령어나 연산의 중간 값 등을 일시적으로 기억하는 임시 기억장소

Mode bit

CPU에서 실행되는 것이 커널모드인지 유저모드인지 구분해 주는 bit
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 OS에 피해가 가지 않기 위한 보호 장치

  • 커널모드(0): OS 코드 수행
  • 유저모드(1): 사용자 프로그램 수행

Interrupt나 Exception 발생 시 0으로
사용자 프로그램에게 CPU를 넘기기 전에 1로 셋팅

Interrupt line

인터럽트(Interrupt)의 발생을 감지하는 라인으로 매 instruction을 실행 후 CPU는 Interrupt line을 체크한다.

Timer

특정 프로그램의 CPU 독점을 막기위해 Timer에 할당된 시간만큼 프로그램이 동작한다.
시간이 다 되면 timer interrupt가 발생하여 OS에게 CPU를 넘겨주고, OS가 다음 프로그램에게 timer를 설정하여 CPU를 넘겨준다.

DMA(Direct Memory Access) controller

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용.
  • CPU의 중재 없이 device의 local buffer의 내용을 메모리에 block 단위로 직접 전송.

예를 들어, Input의 작업이 끝나고 local buffer에 있는 값을 메모리로 복사를 해야하는데 원래 메모리는 CPU만 접근할 수 있어서 CPU에게 인터럽트를 걸어야 하므로 버퍼 크기 이상의 데이터를 옮길 때 I/O 장치의 인터럽트가 너무 많이 발생하여 오버헤드가 발생한다.

➡ DMA 방식 이용: CPU 대신 입출력 작업을 대신 해 줄수 있는 채널(Channel)을 통해 한 번의 입출력 단위인 블록(Block) 단위로 CPU에게 인터럽트를 보내 1번의 인터럽트로 처리할 수 있다.

💡 Cycle Stealing이란?
CPU와 DMA가 동시에 메모리 접근 요구 시 속도가 빨라 접근 기회를 더 많이 가지는 CPU가 DMA의 채널에게 기회를 주어 원할한 입출력이 이루어질 수 있도록 하는 방법으로 채널이 CPU의 메모리 접근 사이클을 훔친다고 해서 Cycle Stealing이라 한다.

Memory controller

CPU와 DMA controller가 특정 메모리 영역을 동시 접근하면 문제가 생길 수 있기 때문에 중재 역할



입출력(I/O)의 수행

모든 입출력 명령은 커널 모드에서 수행하여야 한다.
사용자 프로그램에서는 운영체제에게 I/O 요청 ➡ Trap(소프트웨어 인터럽트)을 사용하여 인터럽트 벡터의 특정 위치로 이동 ➡ 제어권이 인터럽트가 가리키는 인터럽트 처리 루틴으로 이동 ➡ 올바른 I/O요청인지 확인 후 수행 ➡ 제어권을 시스템콜 다음 명령으로 옮김

인터럽트(Interrupt)

각 device들이 능동적으로 자신의 상태변화를 CPU에게 알리는 방식.
인터럽트를 당하면 현 상태 정보를 메모리의 제어 스택에 저장 후 CPU의 제어를 인터럽트 처리 루틴으로 넘긴다.

하드웨어 인터럽트

하드웨어가 발생시킨 인터럽트, I/O나 timer 등.

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

소프트웨어가 발생시킨 인터럽트, 오류를 발생시키는 명령(Exception), 시스템콜(System call) 등.

💡 시스템콜(System Call)이란?

사용자 프로그램이 OS의 서비스를 받기 위해 커널 함수를 호출하는 것

인터럽트 벡터

해당 인터럽트의 처리 루틴 주소를 가지고 있음

인터럽트 처리 루틴(=인터럽트 핸들러)

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



[보충 참고자료]
김주균, OS? Oh Yes! 누워서 보는 운영체제 이야기

profile
블로그 이전했어요. fine-dev.site

0개의 댓글