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

Louie·2022년 2월 16일
1

컴퓨터시스템의 구조

운영체제의 종류

  • 공개 소프트웨어 : Linux, Android
  • 비공개 소프트웨어 : Windows

오픈 소스(공개 소프트웨어)의 장점

  • 대부분 무료로 다운받을 수 있고 수정할 수 있어서 개발 비용이 적게 든다.
  • 클라이언트가 문제점과 해결책을 자유롭게 공유해줄 수 있어서 문제점이 생겨도 상대적으로 빠르게 해결할 수 있다.
  • 클라이언트가 오픈 소스에 기여할 수 있어서 기술의 발전 속도가 빠르다.

운영체제의 분류

동시 작업 여부

  • 단일 작업(single tasking) : 한 번에 하나의 작업만 처리한다. (ex : MS-DOS)
  • 다중 작업(multi tasking) : 동시에 여러개의 작업을 처리한다. (ex : UNIX, MS Windows)
  • 요즘 운영체제는 대부분 다중 작업을 지원한다.

사용자의 수

  • 단일 사용자 : MS-DOS, MS Windows
  • 다중 사용자 : UNIX

처리 방식

  • 일괄 처리(batch processing)
    • 작업 요청을 일정량 만큼 모아서 한꺼번에 처리한다.
    • 작업이 완전히 종료될 때까지 기다려야 한다.
  • 시분할 처리(time sharing)
    • 여러 작업을 수행할 때 컴퓨터 자원을 일정한 시간 단위로 분할하여 사용한다.
    • 일괄 처리 시스템에 비해 짧은 응답 시간을 가진다.
    • interactive한 방식이다.
  • 실시간 처리(Realtime OS)
    • 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간시스템을 위한 OS
    • 예) 원자로/공장 제어, 미사일 제어, 반도체 장비, 로보트 제어 등 분야에 사용
    • 실시간 시스템의 개념 확장
      • Hard Realtime System(경성 실시간 시스템)
        • 데드라인이 보장되지 않으면 아주 치명적인 결과가 나올 때 사용
      • Soft Realtime System(연성 실시간 시스템)
        • 데드라인을 지키지 못해도 치명적인 문제가 있지는 않을 때 사용

몇 가지 용어

  • 멀티 태스킹, 멀티 프로세스 : 컴퓨터 전반에서 여러 작업을 동시에 수행
  • 멀티 프로그래밍 : 여러 프로그램이 메모리에 올라가 있음을 강조
  • Time sharing : CPU의 시간을 분할하여 나누어 쓴다는 의미를 강조
  • 위의 내용들은 모두 비슷하지만 무엇을 강조하느냐에 따라 다른 표현을 사용할 수도 있다.
  • 멀티 프로세서 : 하나의 컴퓨터에 CPU(processor)가 여러 개 있는 것을 의미, 위의 용어들과는 달리 하드웨어 적으로 CPU의 개수가 다르다.

유닉스(UNIX)

  • 코드의 대부분을 C언어로 작성(코드의 가독성이 높아짐(생산성 향상))
    • 유닉스 개발 당시에는 어샘블리어로 운영체제를 개발했다고 한다.
  • 높은 이식성
  • 최소한의 커널 구조(성능 향상)
  • 시스템에 맞는 확장에 용이
  • 오픈 소스
  • 프로그램 개발에 용이
  • 멀티 태스킹 지원
  • 다양한 버전

컴퓨터 시스템 구조

  • CPU의 작업이 끝날 때 인터럽트가 발생했었다면 CPU를 OS에게 할당해준다. (Mode bit = 0)
  • OS에서는 인터럽트에 대응하는 처리를 해준다.
  • 레지스터 : 메모리보다 빠르고 정보를 저장할 수 있음
  • PC(Program Counter) : 다음번에 실행할 메모리의 주소를 가지고 있는 레지스터, 인터럽트가 발생하면 PC는 운영체제의 주소를 가진다.

Mode bit

  • 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치
  • Mode bit은 두 가지 모드의 operation을 지원한다.
    • 0 = 모니터 모드(커널 모드, 시스템 모드) : OS 코드 수행
      • 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한 “특권명령”으로 규정한다.
    • 1 = 사용자 모드 : 사용자 프로그램 수행
    • 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 셋팅하고
    • 인터럽트나 Exception 발생 시 Mode bit을 0으로 셋팅한다.

Timer

  • 특정 프로그램이 CPU를 독점하는 것을 막음
  • time sharing을 구현하기 위해 널리 이용됨
  • 현재 시간을 계산하기 위해서도 사용
  • 동작 방식
    • CPU를 다른 인스트럽션을 실행하기 전에 Timer에 값을 셋팅한다.
    • 타이머는 매 클럭 틱 때마다 1씩 감소한다.
    • 타이머 값이 0이 되면 타이머 인터럽트가 발생한다.
    • 타이머 인터럽트가 발생한다면 CPU의 제어권이 운영체제에게 넘어간다.

인터럽트(Interrupt)

  • 인터럽트 당한 시점의 레지스터와 PC를 저장한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
  • 넓은 의미의 인터럽트는 아래 내용을 모두 포함한다.
    • Interrupt(하드웨어 인터럽트) : CPU가 아닌 다른 하드웨어 장치가 CPU에게 어떠한 정보를 알려줄 때 발생하는 것
    • Trap(소프트웨어 인터럽트) : 소프트웨어에서 발생하는 인터럽트이다. Exception이 발생하거나 시스템 콜을 사용하기 위해서 직접 발생 시키기도 한다.
  • 현대의 운영체제는 인터럽트에 의해 구동된다.

인터럽트 용어

  • 인터럽트 벡터
    • 해당 인터럽트의 처리 루틴 주소를 가지고 있음
  • 인터럽트 처리 루틴(=Interrupt Service Routine, 이터럽트 핸들러)
    • 해당 인터럽트를 처리하는 커널 함수

시스템 콜(Sysyem Call)

  • 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
  • 소프트웨어 인터럽트를 통해서 운영체제에게 CPU 제어권을 넘겨준다.

CPU 동작에서의 시스템 콜 예시

  • IO와 관련된 기계어를 사용하려면 특권명령이 필요하다.
  • 사용자 프로그램에서 IO 장치에게 요청할 때는 특권명령이 없기 때문에 OS에게 CPU를 넘겨주는데 이것이 시스템 콜이다.

Device controller

  • 해당 I/O 장치를 관리하는 일종의 작은 CPU
    • CPU는 device controller에게 I/O 장치의 요청을 보낸다.
  • device controller는 I/O가 끝났다면 interrupt로 CPU에 그 사실을 알린다.
  • 제어 정보를 위해 control register, status register를 가진다.
  • local buffer를 가진다.
    • local buffer : CPU의 작업 공간인 메모리처럼 local buffer라는 작업 공간이 있다.
  • device driver(장치 구동기) : CPU가 실행하는 OS 코드 중 각 장치별 처리 루틴을 정하는 software

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

  • 동기식 입출력 (synchronous I/O)
    • I/O 요청 후 입출력 작업이 완료된후에야 사용자 프로그램에게 제어가 넘어간다.
    • 구현 방법 1
      • I/O가 끝날 때까지 CPU를 낭비시킴
      • 매시점 하나의 I/O만 일어날 수 있음
    • 구현 방법 2
      • I/O가 끝날 때까지 해당 프로그램에게서 CPU를 빼앗음
      • I/O 처리를 기다리는 줄에 그 프로그램을 나열함
      • 다른 프로그램에게 CPU를 줌
  • 비동기식 입출력 (asynchronous I/O)
    • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 사용자 프로그램에게 즉시 제어가 넘어간다.
  • 두 경우 모두 I/O가 끝나면 인터럽트를 통해 알려준다.

DMA(Direct Memory Access)

  • 메모리에 접근 가능한 컨트롤러
  • 인터럽트가 발생 시 수행하고 있는 작업을 중단하고 CPU가 local buffer에 있는 값을 메모리에 복사하는 과정이 CPU의 효율을 떨어트리기 때문에 만들어짐
  • DMA controller가 직접 local buffer에 있는 값을 메모리에 복사하고 CPU에 인터럽트를 한번만 발생시킴
  • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴

서로 다른 입출력 명령어(기계어)

  • I/O를 수행하는 special instruction에 의해
    • I/O 장치를 접근하는 기계어와 Memory를 접근하는 명령어가 따로 있다.
  • Memory Mapped I/O에 의해
    • Memory를 접근하는 명령어를 통해서 I/O 장치도 접근하는 방법이다.
profile
백엔드 개발자를 준비하고 있는 Louie입니다.

4개의 댓글

comment-user-thumbnail
2022년 2월 18일

루이도 OS 열심히 공부하시는군요 👍

1개의 답글
comment-user-thumbnail
2022년 2월 22일

👍🏻

1개의 답글