운영체제 02 컴퓨터시스템의 구조 | KOCW 이화여대 반효경

protect-me·2021년 9월 13일
0

 📝 CS Study

목록 보기
35/37
post-thumbnail

운영체제란 무엇인가?


이미지 출처

  • 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층
  • 협의의 운영체제(커널)
    운영체제의 핵심 부분으로 메모리에 상주하는 부분
  • 광의의 운영체제
    커널 뿐만 아니라 각종 주변 시스템 유틸리티를 포함한 개념

운영체제의 목적

  • 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
  • 자원을 효율적으로 관리

운영 체제의 분류

동시 작업 가능 여부

단일 작업

  • 한번에 하나의 작업만 처리

다중 작업

  • 동시에 두 개 이상의 작업 처리(현대의 운영체제는 대부분 다중 작업)
  • ex) UNIX, MS Windows...

사용자의 수

단일 사용자

ex) MS Windows

다중 사용자

ex) Unix, NT server ...

처리 방식

일괄 처리 | batch processing

  • 작업 요청의 일정량 모아서 한꺼번에 처리
  • 작업이 완전 종료될 때까지 기다려야 함

시분할 | time sharing

  • 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
  • 일괄 처리 시스템에 비해 짧은 응답 시간을 가집
  • interactive한 방식

실시간 | Realtime OS

  • 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간 시스템을 위한 OS
  • 즉, 데드라인이 있고 꼭 지켜야하는 시스템

용어정리

  • Multitasking: 다중 작업
  • Multiprogramming: 메모리에 여러 프로그램이 올라가있는 상태
  • Time Sharing: CPU의 시간을 분할하여 나누어 씀
  • Multiprocess: 다중 처리
  • Multiprocessor: 하나의 컴퓨터에 CPU(processor)가 여러 개 붙어 있음을 의미.

운영 체제의 예

  • 유닉스, 리눅스, MS Windows, ...

운영체제의 구조

  • CPU 스케줄링
    누구에게 CPU를 줄까?
  • 메모리 관리
    한정된 메모리를 어떻게 쪼개어 쓸까?
  • 파일 관리
    디스크에 파일을 어떻게 보관할까
  • 입출력 관리
    각기 다른 입출력장치와 컴퓨터 간에 어떻게 정보를 주고 받게 할까
  • 프로세스 관리
    프로세스의 생성과 삭제
    자원 할당 및 반환
    프로세스 간 협력

컴퓨터 시스템 구조

  • 컴퓨터 내부 / 외부(I/O)

Registers

  • Registers: 명령어를 실행하기 위해 필요한 데이터와 상태, 명령어를 저장하는 기억 소자. CPU 내부에 존재하며, 기억 장치 중 가장 빠르며 용량이 작음
  • Program Counter: 다음번에 실행할 기계어의 메모리 주소를 가지고 있는 레지스터. 즉, Program Counter가 가리키고 있는 메모리 위치에서 매번 기계어를 하나씩 가져와서 실행함

Device Controller, Local Buffer

  • 컴퓨터를 부팅하면 OS가 먼저 실행되어 상주하고 있고,
    프로그램을 실행하면 메모리에 올라가면서 프로세스가 됨
  • Device controller: I/O 장치들을 전담하는 작은 CPU들이 붙어있음
  • local buffer: Device controller의 작업 공간(작은 메모리라고 보면 됨)
  • device driver(소프트웨어): I/O에 요청을 하는 방법이 들어있는 곳 => CPU가 실행하는 코드
  • Firmware: device driverd를 통해 실행되는 코드가 바로 펌웨어. 즉, device controller에 들어있는 코드

Interrupt | 하드웨어 인터럽트

  • 일반적인 인터럽트는 하드웨어 인터럽트를 이야기함 (소프트웨어 인터럽트는 아래 system callmode bit에서 설명)
  • CPU에는 Interrupt line이 달려있음
  • 프로그램 A를 실행했을 때 Disk에 뭔가 필요하다고 하면 CPU가 직접 가져오는 것이 아니라, OS가 디스크 컨트롤러에게 어떤 파일을 읽어달라는 요청을 함.
  • 컨트롤러에게 일을 던져놓고 메모리에서는 CPU를 다른 프로그램에 넘김
  • 디스크 컨트롤러가 일을 다 했다면 CPU에 알려주는 방법이 바로 Interrupt를 거는 것
  • CPU는 Interrupt line을 확인하고 처리해야할 일이 있다면 자동적으로 OS에 CPU를 넘김
  • OS는 다시 필요한 프로그램에 CPU를 넘김

Timer

  • CPU 독점을 막기 위한 하드웨어
  • 일정 시간마다 Interrupt를 발생시킴
  • 일정 시간 후 자동적으로 OS에 CPU 제어권이 넘어옴

Mode Bit | Trap | 소프트웨어 인터럽트

  • mode bit: CPU에서 기계어를 실행할 때, OS가 실행하는 것인지, 사용자 프로그램이 실행하는 것인지 구분하는 역할
    (사용자 모드_사용자 프로그램 1 / 모니터 모드_OS 코드 0)
    • CPU가 사용자 프로그램에 넘어가면 OS는 CPU를 제어할 방법이 없음(제어하는 기계어도 CPU에서 실행될 때 의미가 있는데, CPU가 넘어가 있기 때문)
    • 사용자 프로그램에 CPU를 넘길 때, mode bit을 1로 변경 후 넘김 => 사용자 모드에서 권한이 없는 기계어를 실행하고자 할 때(Exception) CPU는 자동으로 OS에게 넘어감

System Call | Trap | 소프트웨어 인터럽트

  • 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
  • 모든 I/O는 특권 명령이기 때문에 사용자 프로그램은 권한이 없음. 따라서, OS에 요청을 해야함. 그것이 바로 시스템콜
  • OS로 CPU를 넘기기 위해서 사용자 프로그램이 스스로 메모리에 인터럽트를 거는 것이 바로 시스템콜(사용자 프로그램이 직접 Program Counter를 넘길 수 없기 때문에 interrupt를 발생시켜 주도권을 넘김)

Interrupt에 대한 정리

1. 협의의 Interrupt

인터럽트 당한 시점의 레지스터와 program countersave한 후 CPU의 제어를 인터럽트 처리 루틴에 넘김

2. 광의의 Interrupt

2-1. Interrupt(하드웨어 인터럽트)
  • 하드웨어가 발생시킨 인터럽트
2-2. Trap(소프트웨어 인터럽트)
  • Exeption: 프로그램이 오류를 범한 경우
  • System Call: 프로그램이 커널 함수를 호출하는 경우

=> hardward interrupt, software interrupt(expeption, system call)의 모든 경우에 interrupt line을 통해 동작함
=> 현대의 운영체제는 인터럽트에 의해 구동됨

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

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

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

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

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

DMA | Direct Memory Access

기존 : CPU 입장에서 interrupt가 너무 빈번하게 들어오면 하던 일을 멈추고 interrupt에 해당하는 local buffer에 점근해서 카피, memory에 올리고 일을 처리함. 아주 작은 단위까지 계속해서 이런 방식으로 반복하는 것은 비효율적이라는 거지.

  • CPU를 제외하면 Memory에 직접 접근할 수 있는 장치가 딱 하나 있는데, 그것이 바로 DMA.
  • 일정 수준까지는 interrupt가 발생해도 DMA가 local buffer에서 카피를 해와서 메모리에 올려줌
  • 일정 수준이 넘어가면 interrupt를 발생시킴.
  • 따라서 interrupt 발생 빈도가 낮아지고, CPU를 더욱 효율적으로 사용할 수 있게 됨.
  • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴

서로 다른 입출력 기계어

  • 두가지 방식이 있음
  1. 메모리 접근하는 기계어, I/O 접근하는 기계어가 따로 있는 방식
  2. 메모리 접근하는 기계어로 I/O까지 접근하는 방식
    다만 메모리 주소가 I/O 장치까지 연장해서 메겨지도록 해둠

저장장치 계층 구조


  • Primary
    CPU에서 직접 접근 가능 / 빠름 / 높은 비용 / 휘발성
  • Secondary
    I/O를 통해서 접근 가능 / 느림 / 낮은 비용 / 비휘발성
  • Caching: 더 빠른 스토리지 시스템에 정보 복사해두고 씀(재사용성)

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

  • 실행파일의 가상 메모리 중에서 즉시 필요한 것들을 실제 메모리에 올림
  • 실제 메모리가 꽉찬 상태라면 스왑 메모리에 배분
  • 가상 메모리는 stack, data, code로 구성됨
  • codeaddress translation을 통해 주소값이 번역되어 전달됨

커널(OS) 주소 공간의 내용

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

함수

  • 사용자 정의 함수
    : 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수
    : 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수, 자신의 프로그램의 실행 파일에 포함되어 있음
  • 커널 함수
    : 운영체제 프로그램의 함수
    : 커널 함수의 호출 = 시스템 콜

프로그램의 실행

  • user mode, kernel mode를 돌면서 실행됨

📚 참고

KOCW | 운영체제 | 이화여자대학교 | 2017-1 | 반효경


Photo by Tianyi Ma on Unsplash

profile
protect me from what i want

0개의 댓글