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

한결·2023년 3월 16일
0

CS

목록 보기
2/34

KOCW.이화여자대학교.반효경.운영체제
위 강의를 바탕으로 학습 및 정리했습니다


1

운영체제란 ?

  • 협의의 운영체제 (커널)

    • 운영체제의 핵심 부분으로 메모리에 상주하는 부분
  • 광의의 운영체제

    • 커널 뿐 아니라 각종 주변 시스템 유틸리티를 포함한 개념
    • 컴퓨터 시스템을 관리하는 전반적인 시스템(파일 복사 등)을 포함한 뜻
  • 자원을 효율적으로 관리하는 역할을 함

운영체제의 분류

  • 동시 작업 가능 여부
  • 사용자수
  • 처리방식

동시 작업 가능 여부

  • 단일 작업 (single tasking)
    • 한 번에 하나의 작업만 처리
  • 다중 작업 (multi tasking)
    • 동시에 두 개 이상의 작업 처리

사용자의 수

  • 단일 사용자 (single user)
    • windows
  • 다중 사용자 (multi user)
    • 리눅스 , 유닉스, NT server

처리 방식

  • 일괄 처리 (batch processing)

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

    • 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간단위로 분할하여 사용
    • 일괄 처리 시스템에 비해 짧은 응답시간
  • 실시간 (Realtime OS)

    • 정해진 시간 안에 어떤한 일이 반드시 종료됨이 보장되어야하는 실시간 시스템을 위한 OS
    • 원자로/공장 제어, 미사일 제어, 반도체 장비, 로보트 제어 등
    • 개념 확장
      • Hard realtime system
      • Soft realtime system

몇가지 용어

  • Multitasking : 프로그램 여러개 실행시키는 거

  • Multiprogramming

  • Time sharing

  • Multiprocess

  • 구분

    • 위의 용어들은 컴퓨터에서 여러 작업을 동시에 수행하는 것을 뜻한다
    • Multiprogramming은 여러 프로그램이 메모리에 올라가 있음을 강조
    • Time sharing은 CPU의 시간을 분할하여 나누어 쓴다는 의미를 강조
  • Multiprocessor

    • 하나의 컴퓨터에 CPU(processor)가 여러 개 붙어 있음을 의미
    • 이 강의에서는 일반적으로 CPU 한 개인 컴퓨터에 대해 강의

운영 체제의 예

  • 유닉스 (UNIX)
    • 서버를 위한 운영체제 (동시 수행을 위한)
    • 대부분을 C언어로 작성
    • 높은 이식성
    • 최소한의 커널
    • 복잡한 시스템에 맞게 확장 용이
    • 소스 코드 공개
    • 프로그램 개발에 용이
    • 다양한 버전
      • System V, FreeBSD, SunOS, Solaris
      • Linux
  • DOS
  • Windows
  • Handheld device를 위한 OS (스마트폰을 위한)
    • 어떠한 측면에선 소프트웨어 플랫폼이라 부름
      • 개발자가 그 플랫폼을 위해 앱을 개발

운영체제의 구조

  • 이것들이 운영체제가 관리하는 일

2

컴퓨터 시스템의 구조

  • 컴퓨터 전원을 켜게되면 운영체제가 메모리에 상주하면서 실행이 됨

  • 프로그램을 실행시키면 해당 프로그램이 메모리에 올라가서 프로세스가 됨

  • Device Controller : I/O 장치를 전담하는 작은 CPU

  • Local buffer : Device Controller의 작업공간 (작은 메모리 같은)

  • CPU의 작업공간 메모리 (메모리도 메모리를 전담하는 Controller가 따로 있음)

    Mode bit

  • CPU 권한이 프로세스에 넘어가면 운영체제가 CPU를 제어할 방법이 없음

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

    -> Mode bit으로 위험한 기능은 실행하지 못하도록 하고 CPU권한이 운영체제로 넘어오도록 함 (즉, 사용자 프로그램은 제한된 기능만 수행할 수 있도록 제어하고 CPU권한이 한 프로그램에 머물지 못하도록 함)

  • Mode bit

    • 하드웨어적으로 두가지 모드의 operation 지원

      1 : 사용자 모드 / 사용자 프로그램 수행
      2 : 모니터 모드 / OS 코드 수행

    • 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 사능한 "특권 명령"으로 규정
    • Interrupt나 Exception 발생시 하드웨어가 Mode bit을 0으로 바꿈
      • CPU 권한을 자동적으로 운영체제로 넘어가게하는 방법 2가지 Interrupt, Exception

      • Exception : 예외상황이 발생하면 (위험한 기능을 실행하려하면)

      • Interrupt

        • CPU에는 Interrupt Line이란 것이 붙어 있음
        1. CPU가 매 순간 메모리에서 기계어를 읽어서 실행한 다음

        2. 다음 기계어를 실행하기 전에 Interrupt Line에 Interrupt 들어온게 있는지 체크

        3. Interrupt가 들어 왔으면 자동적으로 운영체제로 CPU 권한이 넘어감

        4. 그 Interrupt에 대응하는 일 수행

    • 사용자 프로그램에게 CPU를 넘기기 전에 Mode bit을 1로 셋팅
  • registers : CPU가 수행하는 연산의 Input/Output을 저장하기 위한 아주 빠르고 작은 메모리같은 역할 (메모리는 아님) / 여러가지 레지스터가 있음

    • Program counter Register
      • 다음번에 실행할 기계어의 메모리 주소를 가지고 있음 -> CPU가 어떤 프로세스를 실행중인지 알 수 있음

    Timer

  • CPU의 독점을 막기 위해선 운영체제 혼자서 CPU 권한을 뺏을 수 없음
    -> 따라서 추가적인 하드웨어가 필요함

  • 타이머 (Timer)

    • 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 일정시간 간격으로 Interrupt를 발생시킴 -> 특정 프로그램이 CPU를 독점하는 것으로부터 보호
    • Time sharing을 구현하기 위해 널이 이용됨
    • 현재 시간을 계산하기 위해서도 사용

3

  • CPU는 Program counter 라는 레지스터에서 다음에 실행되어야할 프로그램의 메모리주소를 가지고 기계어를 실행, 이런식으로 자동적으로 (원칙적으론) 다음 프로그램의 위치를 읽어오면서 기계어 실행

    -> 하지만 프로그램이란 것이 항상 동일한 수행순서를 가지고 실행되진 않음
    == 어떤 조건을 만족하느냐 하지 않느냐에 따라서 수행순서가 바뀔 수 있음

    • Interrupt가 들어오면 Program counter는 다음 프로그램의 위치를 가리키는 것이 아닌 운영체제를 가르켜서 운영체제가 실행(Mode bit이 0)되도록 함

Interrupt

  • 현대의 운영체제는 인터럽트에 의해 구동됨
  • 인터럽트 당한 시점의 레지스터와 Program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다
  • 인터럽트의 로직 2가지
    • Interrupt (하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
      • 일반적인 인터럽트
    • Trap (소프트웨어 인터럽트)
      • Exeption : 프로그램이 오류를 범한 경우
      • System Call : 프로그램이 커널 함수 호출
        • I/O 명령은 "특권 명령" -> 운영체제에게 부탁해야 함 -> 소프트웨어가 직접 Interrupt Line을 세팅
  • 관련 용어
    • 인터럽트 벡터
      • 인터럽트 종류 별로 해당 인터럽트가 발생했을 때 실행해야하는 코드의 운영체제안 위치(주소)를 담고 있는 부분
      • 즉, 해당 인터럽트의 처리 루틴 주소를 가지고 있는 부분
    • 인터럽트 처리 루틴 (인터럽트 핸들러)
      • 그 벡터의 정해진 주소로 가면 해당 인터럽트에서 무슨일을 해야하는지 기계어로 정의되어 있는 부분
      • 즉, 해당 인터럽트를 처리하는 커널 함수

시스템 콜

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

  • 예시

    1. 사용자 프로그램 A가 I/O가 필요
    2. Interrupt line 세팅
    3. program counter가 운영체제 가르킴
    4. mode bit 0
    5. 운영체제가 CPU권한 가짐
    6. I/O 명령함
    7. device 컨트롤러가 해당 명령(I/O 작업) 수행
    8. 수행이 완료되면 Interrupt 걸어서 수행완료 사실을 알림
    9. CPU가 해당 수행 결과 읽음
    10. I/O를 받아서 사용자 프로그램 A 다시 실행

    Device controller

  • Device controller는 하드웨어임 (CPU도 하드웨어 -> 운영체제에 의해 동작 )

    • 펌웨어라는 소프트웨어에 의해 특정 기능 수행함
  • Device driver

    • 운영체제 안에 있는 코드 중 CPU가 I/O장치에게 부탁을 하는 방법이 적혀 있는 코드

동기식 입출력 / 비동기식 입출력

  • 동기식 입출력 (synchronous I/O)
    • synchronous : 시간적으로 잘 맞아 떨어지게 일하는 느낌
    • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
    • 구현 방법 1
      • I/O가 끝날 때까지 CPU를 낭비시킴
      • 매시점 하나의 I/O만 일어날 수 있음
    • 구현 방법 2
      • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼았음
      • I/O처리를 기다리는 줄에 그 프로그램을 줄세움
      • 다른 프로그램에게 cpu를 줌
  • 비동기식 (asynchronous)
    • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
    • 비동기식은 말이 안되는 것 같지만 (입출력 결과 없이 프로그램이 돌아가는게 말이됨?)
      경우에 따라서 입출력 결과 값을 얻기전에 그 값과 무관한 일을 할 수 있음
      또한 쓰기 명령과 같이 결과를 확인하지 않아도 되는 경우가 있음

DMA

  • 인터럽트가 너무 자주 걸리면 CPU가 너무 비효율적이게 됨 -> 메모리를 접근할 수 있는 장치를 하나 더 둠 (DMA)

  • DMA가 직접 I/O 작업 결과를 메모리에 올려주는 작업까지하고 인터럽트를 검

  • 즉, CPU의 중재 없이 controller가 device의 buffer storage의 내용을 메모리에 (byte단위가 아닌)block 단위로 직접 전송

서로 다른 입출력 기계어

  1. I/O를 수행하는 special instruction에 의해
  • I/O를 전담하는 기계어를 두는 방법 (메모리 기계어 따로 있고 I/O 전용 기계어 따로 있는 방식)
  1. Memory Mapped I/O에 의해
  • 메모리 주소를 실제 메모리에만 매기는게 아니라 I/O 장치에도 메인 메모리를 연장해 메모리 주소를 매겨 놓고 메모리 접근하는 기계어를 통해서 I/O 접근하는 방법

저장장치 계층 구조

  • 휘발성 여부
    • Primary 부분 휘발성
      -> 프로세스
    • I/O 보조기억장치들은 비휘발성
      -> 파일시스템
  • 아래로 갈수록 용량이 크지만 느리고 저렴
  • 실제 모든 데이터 원본은 아래쪽에 저장
  • 케싱
    • 필요할 때마다 아랫쪽 저장장치로 가서 가져오기는 오래걸림
      -> 위쪽 저장장치에 넣어두면 굳이 아래까지 안내려가도됨
      -> 하지만 위쪽 저장장치의 용량은 한정되어있음
      -> 따라서 재사용성이 높은 데이터를 보관

프로그램의 실행


프로그램 실행 단계

  1. 프로그램이 파일 시스템에 실행파일 형태로 저장되어있음 -> 이를 실행
  2. 그 프로그램이 메모리에 올라가서 프로세스가 됨 (운영체제 커널은 기본적으로 올라가 있음)

  • 사실 중간에 한단계가 더 있음

  • 프로그램이 실행될 때는 그 프로그램의 독자적인 주소 공간(자기만의 주소공간은 0번지 부터 존재)이 만들어짐 == Virtual Memory
    -> 당장 필요한 부분(1)은 물리적인 메모리에 올라감
    그렇지 않은 부분(2)은 디스크의 Swap Area에 내려가게 됨
    (2) 중의 일부(code 등) 파일 시스템에 실행파일 형태로 존재

  • 각 프로세스들만의 주소(논리적 주소) / 물리적인 메모리 주소(물리적 주소)는 다른 주소임
    -> 주소변환(Address Translation)이 필요

  • 프로세스 각각의 Address space에는 크게 몇가지 구성요소가 있음
    == 코드 / 데이터 / 스택

    • 코드 : 실행파일에 있던 코드가 올라오는 부분으로써 실제로 CPU에서 수행할 기계어들이 위치하는 부분
    • 데이터 : 데이터가 보관 되는 영역 / 프로그램이 실행되다가 메모리 데이터가 필요할 때 이 데이터 영역에 위치하게 됨
      • 모든 데이터가 위치하는건 아님
      • 함수 안에 들어있는 지역변수 같은 데이터는 스택
      • 전역 변수나 프로그램의 실행부터 종료까지 남아있는 데이터들이 데이터에 위치함
    • 스택 : 함수 호출과 리턴 이런 것들에 관련된 정보가 위치
  • 운영체제 커널도 하나의 프로그램임 -> 함수구조로 되어있음 -> 커널의 주소공간도 코드/데이터/스택으로 이루어져 있음

커널 주소 공간의 내용

  • 운영체제는 시스템의 프로세스를 다 관리해야 함
    -> 모든 하드웨어들을 관리하기 위한 자료구조와 모든 프로세스들을 관리하기 위한 자료 구조를 가지고 있음
    == PCB (Process Control Block)

  • 운영체제의 스택은 각 프로세스 별로 스택을 두고 있음

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

  • 함수
    • 사용자 정의 함수

      • 자신의 프로그램에서 정의한 함수
    • 라이브러리 함수

      • 자신의 프로그램에서 정의한 함수가 아니고 갖다 쓴 함수
      • 자신의 프로그램 실행파일에 포함되어 있음

      실행하면 프로세스의 Address space에


    • 커널 함수
      • 운영체제 프로그램의 함수
      • 커널 함수 호출 == 시스템 콜
      실행하면 커널의 Address space에

  • 프로그램이 하나 실행되면 user mode <-> cuner mode를 왔다갔다하다가 종료

(mode bit == 0 : cuner mode / mode bit == 1 : user mode)

0개의 댓글