[2주차] 컴퓨터 시스템의 구조

신은지·2021년 9월 18일
0

반효경 공룡 OS

목록 보기
2/8

운영체제 분류와 컴퓨터 시스템 구조

운영체제의 분류

지금 쓰는 운영체제는 다중 작업 & 다중 사용자 & 시분할 OS

  • 동시 작업 가능 여부
    (1) 단일 작업 (single tasking) : 한 번에 하나의 작업만 처리 - 초창기
    (2) 다중 작업 (multi tasking) : 동시에 두 개 이상의 작업 처리 - 현재

  • 사용자의 수
    (1) 단일 사용자 (single user)
    (2) 다중 사용자 (multi user)
          : 한 대의 컴퓨터에 여러 사용자가 터미널 형태로 동시에 접속해서 사용하는 형태
          : 보안 문제 등 해결 필요

  • 처리 방식
    (1) 일괄 처리 (batch processing) - 사용자 말고 내가 편한대로 하겠다! 지금 사용 X
          : 작업 요청의 일정량을 모아서 한꺼번에 처리
          : 작업이 완전 종료될 때까지 기다려야 한다

    (2) 시분할 처리 (time sharing) - 현재 사용. 시간을 쪼개서 쓴다
          : 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정 시간 단위로 분할해서 사용.
          : 사용자를 번갈아가며 사용한다 = 마치 나 혼자 컴퓨터를 쓰는 것 같은 방식.
          : 일괄 처리에 비해 응답시간 짧다
          : interactive 방식

    (3) 실시간 (realtime OS) : deadline이 있는 작업을 위한 OS. 자원의 효율적 관리와는 다른 개념
          : 정해진 시간 안에 반드시 종료되어야 하는 시스템을 위한 OS
          : 원자로/공장 제어, 미사일 등..
          : 개념 확장 - Hard (경성. 꼭 지켜야함) & Soft (연성. 동영상 프레임 처리같이 가벼운 경우)

  • 컴퓨터에서 여러 작업을 동시에 수행하는 것을 의미하는 용어들
    (1) Multitasking : 컴퓨터 안에서 여러 개 프로그램을 동시에 돌리는 것
    (2) Multiprogramming : 메모리를 강조. 메모리에 여러 프로그램이 올라가 있는 것
    (3) Time sharing : CPU를 강조. CPU 시간을 분할해서 나누어 쓴다
  • Multiprocessor : 하나의 컴퓨터에 여러 CPU (processor)가 있음을 의미

운영체제의 예

  • 유닉스 (UNIX)
    : 초창기에 큰 서버를 위한 운영체제.
    : 높은 이식성과 확장성 & 복잡한 구조 지원을 위해 대부분 C언어(어셈블리보다 개발 편리. 여러 아키텍처와 호환된다)로 작성됨
    : 최소한의 커널 구조로 확장과 프로그램 개발에 용이
    : Solaris, Linux, etc.
  • DOS
    : 개인 사용자를 위한 OS
    : 단일 작업, 단일 사용자를 위한 OS
  • MS Windows
    : 다중 작업용 OS
    : 풍부한 지원 소프트웨어
  • Handheld device를 위한 OS
    : 안드로이드, IOS 등도 OS로 볼 수 있다. (SW 플랫폼 & OS)

컴퓨터 시스템 구조

컴퓨터 시스템이 어떻게 되는지, 그 위에서 프로그램들이 어떻게 돌아가는지

  • CPU
    : 기계어를 연산한다
    : register를 이용해 연산을 저장하고 처리
          (1) PC (Program Counter) : 다음에 실행할 메모리의 주소를 가리키는 레지스터.

  • mode bit
    : 사용자 프로그램에 의해 다른 프로그램과 OS에 피해 가지 않도록 제어하기 위한 보호장치
    : CPU가 OS에 의해 실행되는지, 사용자 프로그램에 의해 실행되는지를 구분
          (1) 사용자 모드 : 사용자 프로그램 수행. 제한된 기계어만을 수행 가능. 1
          (2) 모니터 모드(=커널 모드, 시스템 모드) : OS 코드 수행. 뭐든 할 수 있다. 0
    : mode bit = 0일 때만 특권 명령(보안을 해칠 수 있는 주요 명령어) 수행 가능
    : Interrupt 또는 exception 발생 시 HW는 mode bitd을 0으로 바꾼다
          (1) Exception : 권한 없는 명령어를 실행하려는 경우 등 예외 상황 처리.
          (2) Interrupt : 매 순간 기계어를 읽고 실행할 때 Interrupt line을 체크해서 시그널을 통해 판단한다.

  • Timer
    : 프로그램으로부터 CPU 독점을 막고 CPU 사용권을 넘겨받기 위해 존재하는 하드웨어
    : 일정 시간 간격으로 인터럽트를 발생시켜 프로그램의 CPU 제어권을 OS로 넘겨준다
    : time sharing을 구현하며, 현재 시간을 계산하기 위해서도 사용된다

  • Memory
    : CPU가 기계어를 연산하기 위한 작업공간이 메모리
    : OS는 언제나 메모리에 상주
    : 프로그램이 실행되면 메모리에 올라가서 프로세스가 된다
    : 메모리도 device니까 device controller 존재

  • I/O device controller
    : I/O 장치를 전담하는 작은 CPU
    : 제어 정보를 위해 control register, status register를 갖는다
    : I/O가 끝났을 때 인터럽트로 CPU에게 알린다
    : device controller에서 발생하는 코드를 펌웨어라고 부르며, 이미 안에서 코딩이 되어 있는 상태.

  • local buffer
    : 각각의 controller의 작업 공간

  • 시스템 콜
    : 사용자 프로그램이 OS의 서비스를 받기 위해(=특권 명령을 수행하기 위해 =SW가 본인이 할 수 없는 일을 OS에게 부탁하기 위해) 커널 함수를 호출하는 것
    : 인터럽트를 활용해 스스로 OS를 불러서 CPU를 넘겨준다


인터럽트 (Interrupt)

현대의 운영체제는 인터럽트에 의해 구동된다
운영체제에게 CPU가 넘어가려면 인터럽트가 걸려야한다!

  • 인터럽트 당한 시점의 레지스터와 PC를 저장해서 CPU 제어를 인터럽트 처리 루틴에 넘긴다
  • 하드웨어 인터럽트 (Interrupt) : 일반적인 인터럽트. 하드웨어가 발생시킨 인터럽트
  • 소프트웨어 인터럽트 (Trap) : 개별 프로그램이 OS에게 CPU 넘길 때.
    (1) Exception : 프로그램이 오류를 범한 경우
    (2) System call : 프로그램이 커널 함수를 호출하는 경우
  • 관련 용어
    (1) 인터럽트 벡터 : 인터럽트 종류별로 해당 인터럽트의 처리 루틴 주소(실행해야 하는 위치)를 가진다
    (2) 인터럽트 처리 루틴(=인터럽트 핸들러) : 인터럽트 벡터를 따라 갔을 때 해야 하는 일이 있는 것(=해당 인터럽트 처리 함수)

반대로 CPU를 빼앗기는 경우는?

  • 타이머 인터럽트 : 나는 독점하고 싶은데 시간이 제한됨
  • I/O 작업 해야 할 때 : 내가 하고 싶어도, 어차피 I/O 작업 끝나야 가능할 때

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

둘 모두 I/O 완료는 인터럽트로 알려준다

  • 동기식 입출력 (synchronous I/O)
    : I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에게 넘어간다 (기다림)
    : 구현방법
    (1) : I/O 끝날 때까지 CPU를 낭비시켜, 매 시점 하나의 I/O만 일어날 수 있게 한다.
    (2) : I/O 끝날 때까지 해당 프로그램에게서 CPU 빼앗고 I/O 처리 기다리도록 줄 세우고(기다리는 동안 CPU가 낭비되니까), 그동안 다른 프로그램에게 CPU 준다. I/O도 CPU도 놀지 않는 방법

  • 비동기식 입출력 (asynchronous I/O)
    : I/O 시작된 후 입출력 작업이 끝나지 않더라도 제어가 사용자 프로그램에게 넘어간다 (안기다림)


DMA (Direct Memory Access)

인터럽트 처리도 일종의 오버헤드니까 CPU에게 비효율적!

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용한다
  • 디바이스에서 읽은 내용을 CPU 중재 없이 device controller가 device의 buffer storage 내용을 메모리에 블럭 단위로 직접 전송한다
  • 인터럽트를 덜 빈번하게 발생시키는 방법

입출력 명령어(기계어)

instruction = CPU에서 수행하는 명령어 = 기계어

  • I/O를 수행하는 방법
    (1) I/O 전담 기계어 : I/O 전담 기계어와 메모리 전담 기계어가 따로 있다.
    (2) Memory Mapped I/O : I/O 장치까지 메모리 접근 기계어를 I/O 주소까지 연장해서 매겨놓고, 이를 통해서 I/O에 접근한다.
profile
호그와트 장학생

0개의 댓글