[운영체제 OS] 시스템 구조 System Structure

2023. 1. 1. 20:15·CS/운영체제 OS

Github Repo: pythonstrup

02 시스템 구조 System Structure

 

목차

  1. 컴퓨터 시스템 구조

      1-1. 운영체제란

      1-2. 하드웨어와 I/O 그리고 연산

      1-3. 인터럽트

 

  1. 동기식 I/O vs 비동기식 I/O

      2-1. 동기식과 비동기식 입출력의 개념

      2-2. 입출력 명령어의 차이

 

  1. 저장 장치

      3-1. 저장 장치의 구조

      3-2. 저장 장치의 계층 구조

 

  1. 프로그램 작동

      4-1. 프로그램의 실행

      4-2. 커널 주소 공간

      4-3. 사용자 프로그램이 사용하는 함수



1. 컴퓨터 시스템 구조의 이해

1-1. CPU와 메모리

 

  • CPU: 매 클럭(clock)마다 메모리에서 명령(instruction)을 읽어와 수행한다. 쉬지 않고 일한다.
  • 메모리: CPU의 작업 공간
  • Disk: 일명 하드디스크, Memory에서 하드디스크의 기록을 읽어오거나 Memory에서의 처리 결과를 저장한다. input과 output을 모두 수행하는 I/O device이다.

 

1-2. 하드웨어와 I/O 그리고 연산

 

  • register: CPU에서 메모리보다 빠르게 접근할 수 있는 작업공간으로 소량의 정보만을 담을 때 사용한다.
  • mode bit: CPU에서 실행되는 것이 운영체제인지 사용자 프로그램인지 구분해주는 역할을 한다. CPU의 제어권을 누가 가지고 있는지를 알려준다고 생각하면 된다. 이를 통해 사용자 프로그램의 잘못된 수행으로 인해 다른 프로그램 및 운영체제에 피해가 가지 않도록 방지할 수 있다.
    • 1 => 사용자 모드: 사용자 프로그램 수행
    • 0 => 모니터 모드: OS 코드 수행
    • 모니터모드는 커널 모드, 시스템 모드라고 부르기도 한다.
    • interrupt나 Exception 발생시 하드웨어가 mode bit을 0으로 바꾼다.
    • 사용자 프로그램에게 CPU를 넘기기 전 1로 설정한다.
    • 보안을 해칠 수 있는 중요한 명령어는 mode bit이 0일 때만 수행 가능하다.

 

  • 디바이스마다 컨트롤러(device controller)가 존재한다. 이 컨트롤러는 디바이스를 전담하는 작은 CPU이다.
    • 제어 정보를 위해 control register, status register를 가진다.
    • I/O 연산은 CPU가 직접하지 않고 디바이스 컨트롤러가 해준다.
    • I/O 디바이스마다 작은 CPU가 존재한다면 그에 대한 메모리도 존재할 것이다. 디바이스의 메모리 역할을 하는 것이 local buffer이다.

 

  • 장치 구동기 device driver: 하드웨어가 아닌 소프트웨어이다. OS 코드 중 각 장치별 처리 루틴을 의미한다. CPU가 처리하는 메모리 명령어에 저장되어 있다.

 

  • 입출력 I/O 의 수행
    • 시스템콜 system call을 통해 사용자 프로그램은 운영체제에게 I/O를 요청할 수 있다.
    • trap을 사용해 인터럽트 벡터의 특정 위치로 이동한다.
    • 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동한다.
    • 올바른 I/O 요청인지 확인 후에 수행한다.
    • I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮긴다.

 

1-3. 인터럽트

 

인터럽트는 운영 체제에서 컴퓨터에 예기치 않은 일이 발생하더라도 작동이 중단되지 않고 계속적으로 업무 처리를 할 수 있도록 해 주는 기능이다.

좁은 의미는 하드웨어가 발생시킨 인터럽트만을 뜻하지만 넓은 의미의 인터럽트는 하드웨어가 발생시킨 인터럽트와 (Trap=) 소프트웨어 인터럽트를 모두 포함한다. Trap은 system call(커널 함수 호출)과 Exception(예외 및 오류)에 의해 발생할 수 있다.

인터럽트가 발생한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘겨 작업을 수행한다.

현대의 운영체제는 인터럽트에 의해 구동된다는 말을 할 정도로 아주 중요한 개념이다.

 

  • interrupt line: CPU는 기본적으로 메모리의 순서에 따라 명령어(instruction)만 수행하는 기능밖에 없다. I/O device에 변화가 생겼을 때 그것을 인지하기 위해 필요한 것이 interrupt line이다. 이를 기반으로 CPU는 자원을 재할당할 수 있다.
  • timer: 만약 무한루프를 도는 작업을 처리하게 된다면? 무한정으로 그 프로그램에 사로잡혀 다른 작업을 할 수 없게 될텐데 이를 방지하는 것이 timer이다. 프로그램에 자원을 할당하기 전 timer에 값을 세팅한 후 CPU를 넘겨주는데, 할당된 시간만큼만 사용할 수 있으므로 특정 프로그램이 CPU를 독점하는 것을 막아준다. timer에 설정된 시간이 지나면 interrupt를 발생시켜 CPU 제어권을 운영체제로 뺏어와 다른 프로그램에 자원을 할당토록 한다.
    • 매 클럭마다 1씩 감소된다.
    • 타이머가 0이 되면 타이머 인터럽트가 발생한다.
    • time sharing을 구현하기 위해 사용하는 하드웨어이다.

 

  • 시스템 콜 System Call: 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것을 말한다.
  • 인터럽트 벡터 Interrupt Vector: 인터럽트가 발생했을 때, 해당 인터럽트를 처리할 수 있는 서비스 루틴들의 주소를 가지고 있는 공간이다.
  • 인터럽트 처리 루틴 Interrupt Service Routine 또는 인터럽트 핸들러: 해당 인터럽트를 처리하는 커널 함수를 의미한다.

 

  • DMA Controller: 메모리 버퍼, 포인터, 카운터를 사용하여 장치 제어기가 CPU이 도움없이 DMA 컨트롤러를 이용하여 데이터를 직접 메모리로 전송할 수 있도록 도와주는 하드웨어이다.
    • 프로그램 수행 중 인터럽트의 발생 횟수 최소화하고 시스템 효율성 증대시킬 수 있다.
    • CPU는 DMA 컨트롤러와 상태정보 및 제어정보만 전송한다.
    • CPU의 개입 없이 입출력장치와 주 기억장치와의 데이터 직접 전송 가능하다.
  • 오른쪽에 해당하는 것이 DMA Controller가 작동하는 그림이다.



2. 동기식 I/O vs 비동기식 I/O

2-1. 동기식과 비동기식 입출력의 개념

 

두 방식 모두 인터럽트를 통해 I/O의 완료를 전달받는다.

 

  • 동기식 입출력 Synchronous I/O
    • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램으로 넘어가는 방식이다.
    • 구현 방법 (I/O 장치와 CPU의 낭비)
      • I/O가 끝날 때까지 CPU가 기다린다.
      • 매시점 하나의 I/O만 일어날 수 있다.
    • 개선된 구현 방법
      • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗는다.
      • I/O 처리를 기다리는 줄에 그 프로그램을 줄 세운다.
      • 다른 프로그램에게 CPU 제어권을 준다.

 

  • 비동기식 입출력 Asynchronous I/O
    • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어가는 방식이다.

 

동기식 입출력의 과정

  1. 사용자가 I/O 요청을 하면 동기식 입출력에서는 먼저 운영 체제의 커널로 CPU의 제어권이 넘어와서 입출력 처리와 관련된 커널의 코드가 수행된다.
  2. 입출력을 호출한 프로세의 상태를 봉쇄 상태(block state)로 바꾸어 입출력이 완료될 때까지 CPU를 할당받지 못하도록 막는다.
  3. 입출력이 완료되면 I/O 컨트롤러가 CPU에게 인터럽트를 발생시켜 입출력이 완료된 것을 인지시킨다.
  4. 프로세스의 봉쇄 상태를 해제시켜 CPU를 할당받을 수 있게 된다.

 

비동기식 입출력의 과정

  1. CPU의 제어권이 입출력을 요청한 프로세스에게 곧바로 다시 주어지게 되며, 입출력연산이 완료되는 것과 무관하게 처리 가능한 작업부터 처리한다.
  2. 입출력 연산이 완료되면 인터럽트를 통해 이를 CPU에게 알려준다.
  3. 그 시점부터 읽어온 데이터를 필요로 하는 명령을 수행한다.

 

2-2. 입출력 명령어의 차이

 

  • I/O를 수행하는 special instruction에 의하는 경우가 있고, Memory Mapped I/O 의해 발생하는 경우가 있다.
  • 왼쪽 그림처럼 메모리에 접근하는 instruction과 I/O에 접근하는 instruction이 따로 존재해 I/O 디바이스의 접근성을 높이는 경우가 일반적이다.
  • 오른쪽 방식은 Memory Mapped I/O라고 불린다. 메모리로만 접근하는 방식이다.



3. 저장 장치

3-1. 저장 장치의 구조

 

저장 장치는 주 기억 장치와 보조 기억 장치로 나눌 수 있다. 주 기억 장치는 앞에서 메모리라고 부르던 것으로 전원이 꺼지면 내용이 모두 사라져버리는 휘발성(volatile)을 가진 RAM을 매체로 사용한다.

반면 보조 기억 장치는 Disk로 나타난 I/O device로 비휘발성(nonvolatile)을 가진 마그네틱 디스크를 사용한다. 보조 기억 장치는 다시 파일 시스템용과 메모리 연장 공간인 스왑 영역용으로 나눌 수 있다.

보조 기억 장치 중 가장 대표적인 저장 매체인 하드디스크는 여러 개의 마그네틱 원판들이 있고, 암(arm)이 이동하며 원판에 저장된 데이터를 읽고 쓰는 방식으로 동작하게 된다. 디스크 원판의 표면은 트랙(track)으로 나뉘고, 각 트랙은 섹터(sector)로 나뉜다. 섹터에 최소한의 단위 정보가 저장된다.

 

3-2. 저장 장치의 계층 구조

 

일단 그림에 보이진 않지만 메모리의 위에는 CPU가 있다.

  • 위에 있는 하드웨어일수록 속도가 빠르고 비용이 비싸다.
  • Primary에 표기된 메모들은 휘발성이 있고, 용량이 적다.
  • 요즘엔 Secondary에 표기된 Magnetic Disk(Hard Disk) 대신 SSD와 같은 플래시 메모리가 많이 사용된다.
  • 매번 프로세서가 Main Memory에서 명령어를 가져오려면 시간이 오래 걸린다. 이 때 사용하는 것이 CaChe Memory이다. 아주 빠르지만 용량이 작기 때문에 자주 사용하는 것은 따로 담아둔다. 이것을 Caching이라고 한다.
  • Caching: 저속의 저장장치에 저장되어있는 데이터에 대해 그 일부의 복사본을 그보다 빠른 저장장치에 보관에서 컴퓨터 동작의 성능을 향상하는 기법을 말한다.

 

4. 프로그램 작동

4-1. 프로그램의 실행

 

  • 위와 같이 프로그램은 실행 파일의 형태로 하드디스크(파일 시스템)에 저장되어 있고, 실행될 때 Physical Memory에서 그 내용을 불러온다.
  • 이 때 메모리 낭비를 줄이기 위해 가상 메모리 Virtual Memory라는 것을 사용한다.

 

  • 특정 프로그램을 실행시키면 가상 메모리(Virtual Memory) 또는 논리 메모리(Logical Memory)라고 불리는 것이 생성되어 독자적인 주소 공간을 가지게 된다. 주소는 code, data, stack으로 구성되어 있다. 주소공간은 프로그램이 종료될 때 소멸한다.
  • 모든 내용을 Physical 메모리에 올리는 것은 낭비이기 때문에 당장 필요한 정보만 보내야 한다. 나머지 부분은 Swap area라는 디스크에 내려놓게 된다.
  • physical 메모리와 가상 메모리의 주소값이 다르기 때문에 프로그램 내용을 메모리로 옮기는 과정에서 주소값을 바꿔줘야한다. 이를 주소 변환(Address translation)이라고 한다. 주소 변환을 해주는 하드웨어가 따로 존재해 이 작업을 처리해준다.

 

4-2. 커널 주소 공간

 

  • 운영체제의 내용이 있는 커널 주소 공간이다.
  • code
    • 자원 관리를 위한 코드와 편리한 인터페이스를 제공하는 코드 등이 존재한다. 시스템콜과 인터럽트 처리 코드와 같은 필수 기능도 있다.
  • data
    • 운영체제는 하드웨어를 직접 관리하고 통제한다. 하드웨어를 관리하기 위한 자료구조를 하나씩 만들어 가지고 있는다.
    • 운영체제는 프로그램도 관리한다. 프로그램을 관리하기 위한 자료구조 또한 보유하고 있다. 그 자료구조를 PCB(Program Control Block)라고 부른다.
  • stack
    • 함수를 호출하거나 사용할 때 필요한 부분이다.

 

4-3. 사용자 프로그램이 사용하는 함수

 

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

 

  • 라이브러리 함수
    • 사용자의 프로그램에서 정의하지 않고 가져와 사용한 함수
    • 사용자의 프로그램의 실행 파일에 포함되어 있다.

 

  • 커널 함수
    • 운영체제 프로그램의 함수
    • 커널 함수의 호출 = 시스템 콜

 

함수는 주소공간의 code부에 저장된다. 사용자 정의 함수와 라이브러리 함수는 코드부에서 바로 사용할 수 있다. 반면 사용자 프로그램에서 커널 함수를 사용하려면 시스템콜을 통해 인터럽트 라인을 세팅하고 CPU 제어권은 커널로 넘겨 커널 함수를 시행해야 한다. 복잡한 과정이다. 아래는 프로그램의 실행 단계이다.

 

출처

  • 반효경, 운영체제와 정보기술의 원리
  • Abraham Silberschatz, Operating System Concept
'CS/운영체제 OS' 카테고리의 다른 글
  • [운영체제 OS] CPU 스케줄링
  • [운영체제 OS] 프로세스 관리 Process Management
  • [운영체제 OS] 프로세스 Process
  • [운영체제 OS] 운영체제의 개념 Operating System
gakko
gakko
좌충우돌 개발기
  • gakko
    MYVELOP 마이벨롭
    gakko
  • 전체
    오늘
    어제
    • 분류 전체보기 (203)
      • Spring (23)
        • Spring (10)
        • Spring Boot (7)
        • Spring Security (1)
        • Hibernate (4)
      • Test (3)
      • 끄적끄적 (6)
      • 활동 (35)
        • 부스트캠프 (23)
        • 동아리 (3)
        • 컨퍼런스 (3)
        • 글또 (5)
        • 오픈소스 컨트리뷰션 (1)
      • 디자인패턴 (0)
      • Git & GitHub (22)
        • Git (13)
        • Github Actions (1)
        • 오류해결 (5)
        • 기타(마크다운 등) (3)
      • 리눅스 (6)
        • 기초 (6)
        • 리눅스 서버 구축하기 (0)
      • Infra (2)
        • Docker (1)
        • Elastic Search (0)
        • Jenkins (1)
        • AWS (1)
      • MySQL (7)
        • 기초 (6)
        • Real MySQL (1)
      • 후기 (3)
        • Udemy 리뷰 (3)
      • CS (26)
        • 웹 기본지식 (0)
        • 자료구조 (13)
        • 운영체제 OS (12)
        • 데이터베이스 (1)
        • 시스템 프로그래밍 (0)
        • 기타 (0)
      • Tools (1)
        • 이클립스 (1)
        • IntelliJ (0)
      • 프로젝트 (1)
        • 모여모여(부스트캠프) (1)
      • JAVA (32)
        • Maven (6)
        • 오류해결 (11)
        • 자바 클래스&메소드 (1)
        • JSP & Servlet (12)
      • Javascript (5)
        • 기초 (3)
        • React (2)
      • Python (28)
        • 파이썬 함수 (9)
        • 알고리즘 문제풀이 (16)
        • 데이터 사이언스 (2)
        • 웹 크롤링 (1)
      • 단순정보전달글 저장소 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 우진님
  • 공지사항

  • 인기 글

  • 태그

    부스트캠프 멤버십
    MySQL
    Spring
    알고리즘
    부스트캠프
    운영체제
    오류해결
    jsp
    스프링부트
    java
    자바스크립트
    자바
    os
    스프링
    Git
    Python
    부스트캠프 7기
    GitHub
    파이썬
    웹개발
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
gakko
[운영체제 OS] 시스템 구조 System Structure
상단으로

티스토리툴바