[운영체제] 컴퓨터시스템의 구조

이명우·2023년 3월 22일
1

Computer Science

목록 보기
3/9

KOCW - 운영체제(이화여대 반효경 교수)
2장 컴퓨터시스템의 구조

💻 컴퓨터 시스템 구조

  • CPU를 운영체제가 사용할 경우 : 사용할 기계어들을 미리 정의해놨기 때문에 CPU를 안전하게 사용한다는 보장이 있다.

  • CPU를 사용자 프로그램이 사용할 경우 : CPU가 사용자 프로그램에 넘어가면 운영체제는 통제할 수가 없다 -> 사용자 프로그램이 CPU를 어떤 식으로 활용할지 알지 못함(악용할 가능성 있음

🏷 올바른 사용자 프로그램 할당을 위한 장치들

Mode bit

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

  • Mode bit을 통해 하드웨어적으로 두 가지 operation mode 지원
    • 0(모니터모드) : OS 코드 수행(운영체제가 CPU를 가지고 있을 때)
    • 1(사용자 모드) : 사용자 프로그램 수행(제한된 기계어만 수행)

Program counter(레지스터의 일종)

  • 다음에 실행할 기계어의 주소를 가리키고 있는 레지스터

Timer

  • CPU의 독점을 방지하기위한 부가적인 하드웨어

  • 일정시간 간격으로 타이머 인터럽트를 발생시킴

  • 타이머 인터럽트로 인해 다른 프로그램에게 CPU를 넘겨주게 됨

시스템콜 (System Call)

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

  • 사용자 프로그램은 실행중에 어떤 작업을 수행하기 위해서 사용할 수 있는 기계어 외에 필요한 기계어를 실행하기 위해(운영체제의 서비스를 받기위해) 커널 함수를 호출하게 된다.

인터럽트(Interrupt)

CPU에 인터럽트 라인이 생성되어 다음 기계어를 실행하기전에 CPU 제어권을 운영체제에 자동으로 넘어가게 하는 것

INTERRUPT(넓은 의미)

  • Interrupt(하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
  • Trap(소프트웨어 인터럽트)
    • Exception : 프로그램이 오류를 범한 경우(본인에게 권한이 없는 기계어 실행) 발생시키는 Interrupt(오류를 범한 프로그램 응징)
    • system call : 프로그램이 커널 함수를 호출하는 경우

인터럽트 벡터 : 주소에 대한 포인터, 인터럽트의 처리 루틴 주소를 가지고 있음. 해당 주소에 가면 요청에 대한 처리를 위한 기계어가 정의되어있음(인터럽트 처리 루틴)

Device Controller

모든 I/O 장치를 전담하는 작은 CPU, I/O 장치의 I/O 완료 후 CPU에 인터럽트를 거는 역할

  • Device driver : CPU가 I/O장치의 로컬 버퍼에 전송하는 기계어(CPU가 수행하는 코드)

  • 펌웨어 : Device Controller에서 수행되는 코드, 하드웨어의 제어와 구동을 담당하는 일종의 운영체제

인터럽트 정리 - CPU가 운영체제에 넘어가는 경우

  1. 하드웨어 장치들이 인터럽트를 거는 경우

  2. 인터럽트 라인 세팅 -> 시스템 콜(좁은 의미의 인터럽트, trap)

  3. Exception - 사용자 프로그램 오류 발생

  • 운영체제는 인터럽트가 들어오는 경우에 한해서 호출된다.

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

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

synchronous란?

서로 다른 상태를 같은 상태로 만드는 것. 올림픽 종목중 synchronized swimming을 생각하면 이해가 쉽다.

동기의 의미는 적용되는 개념에 따라 의미가 조금씩 달라짐

동기식 입출력의 과정

  • 사용자 프로그램이 I/O 요청 -> 커널 함수 호출(시스템 콜) -> 하드웨어에서 data transfer(시간 소요) -> I/O 작업 완료 -> 인터럽트

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

동기식 입출력은 I/O 의 결과에 따라 CPU를 할당하는데 비동기식 입출력은 이와 무관하게 CPU를 할당한다.

비동기식/동기식 입출력 모두 인터럽트를 통해 I/O 완료 여부를 알리게 된다

DMA

고속 I/O 장치(속도가 빨라서 인터럽트를 자주 걸게 됨)를 사용하면서 인터럽트가 과도하게 걸리면 발생하게 되면?

  • 과도한 인터럽트는 CPU에게 비효율적인 상황이다
  • 해결책은?

DMA Controller

  • CPU의 중재없이 device controller가 device의 buffer storage의 내용을 메모리에 block단위로 직접 전송
  • 인터럽트가 block단위로 발생하게 됨 -> 덜 빈번하게 인터럽트 발생

서로 다른 입출력 기계어

기계어를 통해서 I/O를 수행하는 방법

  1. I/O를 전담하는 기계어를 두는 방법

  2. 메모리 주소를 I/O장치에게도 매겨놓는 방법 : 메모리 접근을 하는 기계어를 통해서 I/O를 하는 방식

프로그램의 실행(메모리 load)


프로그램 파일을 실행(File system) -> 프로그램이 메모리에 올라가서 프로세스가 됨(Physical memory)

Virtual memory

File system과 Physical memory 사이에 있는 프로그램 실행 단계

프로그램 실행시에 프로그램에게 할당되는 독자적인 Address space

virtual memory - physical memory 간 주소 변환(Address space)이 필요함

  • code, data, stack으로 구성이 됨

    • code : 기계어
    • data : 메모리 데이터(전역변수, 프로그램 시작 - 종료시까지 남아있는 데이터들)
    • stack : 함수 호출 + return
  • 커널 또한 code, data, stack의 구조를 가짐

커널 주소 공간의 내용

  • code : 시스템 콜 및 인터럽트 처리 코드, 자원 관리를 위한 코드

  • data : 모든 하드웨어들의 자료구조, 모든 프로세스들을 관리하기 위한 자료구조(Process Controll block, PCB, 프로세스당 한개)

  • stack : 커널의 스택은 각 프로세스마다 별도로 두고 있다.

사용자 정의 함수

함수 (function)

  • 사용자 정의 함수 : 자신의 프로그램에서 정의한 함수

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

  • 커널 함수 : 운영체제 내에 존재하는 함수(커널의 code) 이 함수를 호출하는 것이 시스템 콜

    • 다른 함수와의 차이점 : 프로그램 내에서 사용하는 함수와 달리 시스템콜을 통해서 CPU 제어권을 운영체제에 넘기게 된다.

프로그램 실행 과정

profile
백엔드 개발자

0개의 댓글