본문 바로가기
ComputerScience/OS

1. 운영체제란 & 컴퓨터시스템 구조(1)

by seongju.lee 2022. 11. 2.

* OS 게시물 1,2는 운영체제를 다루기 앞서 컴퓨터시스템 구조의 전반적인 흐름을 적어놓은 내용이다.

 

운영체제란?

- 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층

- 좁은의미로 이야기하는 운영체제를 커널이라고 한다.

   - 컴퓨터 부팅 이후로 메모리에 상주하는 부분
- 넓은의미로 이야기하는 운영체제는 커널을 포함한 각종 주변 시스템 유틸리티를 포함한 개념이다.
   - 예를들어 windows: 복사하는 소프트웨어라는 유틸리티를 포함.

 

운영체제의 목적

1. 사용자 or 프로그램들이 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공한다.

  • 운영체제는 동시 사용자 or 프로그램들이 독자적 컴퓨터를 수행하는 것 같은 illusion을 제공한다.
  • 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행한다.

2. 컴퓨터 시스템의 자원(하드웨어 자원)을 효율적으로 관리한다.

  • CPU, 메모리, I/O 장치 등의 효율적 관리를 제공.
    • 주어진 자원(CPU, 메모리 등)으로 최대한의 성능을 내도록 효율성을 제공.
    • 특정 사용자 or 프로그램의 지나친 불이익이 발생하지 않도록 형평성을 제공.
    • ex)
      - 실행중인 프로그램들에게 짧은 시간씩 CPU를 번갈아 할당.
      - 실행중인 프로그램들에게 메모리 공간을 적절히 분배.
  • 사용자 or 운영체제 자신의 보호

 

그렇다면, 운영체제가 어떻게 자원을 효율적으로 관리하는 지 알아보자.

 

운영 체제의 분류

  • 동시 작업 가능 여부
    • 시분할(time sharing)
      • 여러 작업을 수행할 때, 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용.
      • interactive한 방식(키보드를 통해 입력을 하면 화면에 바로 출력이 되는.)
      • windows, ios, android 등이 시분할 OS를 사용
  • 사용자의 수
    • 단일 사용자
      • MS-DOS 등
    • 다중 사용자
      • UNIX 등
  • 처리 방식
    • 실시간(Realtime OS)
      • 정확히 정해진 시간 안에 반드시 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간시스템을 위한 OS
        ex) 미사일 제어, 반도체 장비
    • 실시간 시스템의 개념 확장
      • Hard realtime system: 반도체 장비와 같은..
      • Soft realtime system: 예를 들어, 영화를 본다면 초당 24프레임을 보여줘야 하지만
                                              맞추치 못한다고해서 사용자가 답답할 뿐, 큰 문제가 발생하지 않는 것.
    • 일괄처리
      • interactive하지 않고 작업 요청의 일정량을 모아서 한꺼번에 처리하는 것.

 

컴퓨터 시스템의 구조

컴퓨터 시스템 구조

  • 우선 컴퓨터 시스템의 구조부터 알아보자.
    • 컴퓨터 내부에는 CPU와 메모리가 존재한다.
    • 컴퓨터 외부, I/O디바이스에는 여러가지가 존재하는데 여기서 디스크
      컴퓨터 내부의 자원이 아닌 입출력이 모두 가능한 입출력 장치이다.
    • CPU의 작업공간은 메모리이다.
      • CPU는 매 순간(매 클럭)마다 메모리 어딘가에 있는 기계어를 읽어서 사용한다.
      • CPU안에 레지스터 중, 메모리주소를 가리키는 레지스터인 PC(Program Counter)가 가리키고 있는 instruction을 하나 읽어 와서 실행 하고, PC가 하나 증가하면서 다음 instruction을 실행 시킨다.
        (단, 다음 instruction실행 시키기 전에, 인터럽트 라인을 체크하고 존재하면 CPU제어권이 os로 넘어간다.)
    • CPU가 디스크에서 파일을 읽어와야 할 때는 어떻게 할까?
      • 디스크에 있는 I/O컨트롤러에게 요청하고 응답을 받게 된다.

 

 

운영체제의 기능

운영체제의 기능

 

  • 용어 정리
    • Mode bit: 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치가 필요
      • 1  사용자 모드: 사용자 프로그램 수행
      • 0  커널 모드: OS 코드 수행
      • interrupt나 exception 발생 시, 하드웨어가 mode bit을 0으로 변경
      • 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 변경
    • 타이머(Timer)
      • 정해진 시간이 흐른 뒤, 운영체제에게 제어권이 넘어가도록 인터럽트를 발생 시킨다.
      • 타이머 값이 0이 되면, 타이머 인터럽트 발생.
      • CPU를 특정 프로그램이 독점하는 것으로부터 보호.
      • 타이머는 time sharing을 구현하기 위해서 널리 이용 된다.
    • Device Controller
      • I/O device controller
        • 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU
        • local buffer를 가진다.(일종의 data register)
      • I/O는 실제 device와 localbuffer 사이에서 일어난다.
      • device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림.
    • Interrupt
      • 인터럽트 당한 시점의 레지스터와 program counter를 저장 한 후
        CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
      • Interrupt(하드웨어 인터럽트): 하드웨어가 발생시킨 인터럽트
      • Trap(소프트웨어 인터럽트):
        • exception: 프로그램이 오류를 범한 경우
        • system call: 프로그램이 커널 함수를 호출하는 경우
          : 사용자 프로그램이 운영체제에게 I/O 요청
          (mode bit이 1인 상태에서 프로그램이 os에 요청할 수 없기 때문에,
           사용자 프로그램이 의도적으로 interrupt line을 세팅하여 mode bit이 0으로 바뀌게 한다.
           그리고 나서, cpu에서 os에 접근하여 커널 함수를 호출 할 수 있는 것.)
      • 인터럽트 관련 용어
        • 인터럽트 벡터
          : 인터럽트 라인에는 해당 인터럽트의 처리 루틴 주소를 가지고 있음.
        • 인터럽트 처리 루틴(ISR: Interrupt Service Routine)
          : os 안에는 해당 인터럽트를 처리하는 커널 함수(인터럽트마다 처리하는 커널 함수가 다르기 때문)

 

 

  • 운영체제에 의해 CPU가 I/O device를 처리하는 방식
    (프로그램이 직접 I/O 디바이스에 접근할 수 없다. I/O 디바이스에는 무조건 운영체제에 의해서만 접근이 가능하다)
    1. 어떤 A 프로그램에서 I/O작업(printf, scanf 등)을 수행해야 한다면, 시스템 콜을 통해서 인터럽트를 발생시킨다.
    2. CPU가 현재 진행 중인 기계어 코드를 완료한다.(명령어 사이클인 인출/실행 단계를 일단 마침)
    3. 인터럽트 벡터를 읽고, ISR주소값을 얻어서 ISR로 이동하여 실행한다.
    4. I/O컨트롤러에 의해서 작업이 수행되는 동안, 운영체제가 A프로그램이 아닌 다른 프로그램에게 CPU를 넘겨준다.
    5. 그렇게 다른 프로그램들을 반복하면서 작업하다가, I/O작업이 끝나고 해당 local buffer에 결과 데이터를 저장하면,
      해당 device controller가 CPU에게 인터럽트를 걸어준다.
    6. CPU가 다른 프로그램을 실행 중이었지만, 인터럽트가 들어왔으니 (1,2,3 작업처럼) 운영체제에게 CPU를 넘긴다.
    7. 운영체제가 어떤 인터럽트인지 확인하고, local buffer에 있던 데이터를 A프로그램의 메모리 공간에 copy해준다.
    8. 그리고 인터럽트가 들어오기 전, CPU를 쓰고 있던 프로그램의 timer가 끝날 때까지
      다시 해당 프로그램에게 CPU를 넘겨준다. (mode bit 0 -> 1)


  • 운영체제가 컴퓨터 자원들을 어떻게 관리하는 지, 운영체제의 기능에 대해 알아보자.
    (그 전에, 컴퓨터가 부팅되는 순간부터 운영체제의 커널이 메모리에 상주하게 된다.)
    1. 운영체제는 어떤 프로그램에게 CPU사용권을 줄까?
      : CPU스케줄링(time sharing)

      CPU가 메모리에 있는 어떤 프로그램에게 넘어간다는 말은 현재 CPU는 운영체제가 가지고 있으며,
      운영체제에 들어있는 기계어 중에 프로그램A로 넘기라는 기계어가 CPU에서 실행된다.
      이런 식으로, 어떤 프로그램이 사용 중인 CPU를 운영체제에게 넘길 수 있는 것은 timer라는 하드웨어가
      timer interrupt를 cpu에게 걸어줌으로써 CPU제어권을 프로그램에서 운영체제로 넘어 오는 것이다.

      즉, 이러한 하드웨어적인 관리는 운영체제의 대행을 통해 이루어진다.

      Ex.
      프로그램 C에서 무한루프 프로그램이 실행 되어, CPU를 독점한다면?
      : 운영체제에서 하는 CPU스케줄링은 일정시간을 걸어서 사용권을 빼앗을 수 있다.
        --> timer라는 하드웨어가 존재하기 때문에, timer가 CPU에게 interrupt를 걸어주면 자동으로 CPU가 os로 넘어간다.
        --> 그리고, os는 다음 프로그램에게 CPU를 넘겨준다.
         

    2. 운영체제는 한정된 메모리를 어떻게 쪼갤까?
      : 메모리 관리


    3. 디스크에 들어온 요청을 어떤 순서로 처리할까?(디스크는 CPU에 비해 100만배 느리다.)
      : 디스크 스케줄링

      디스크 스케줄링에는 여러 알고리즘이 존재하는데, 대표적인 알고리즘에는 엘리베이터처럼 왕복하는 알고리즘이 있다.
      디스크의 헤드가 존재하여 한 끝에서 시작하여 다른 끝으로 가는 길에 있는 모든 요청을 처리하는 것이다.
      다른 한쪽에서는 다시 역방향으로 오면서 모든 요청을 처리한다.
      CPU가 여러 프로그램을 번갈아가며 사용하듯이, I/O장치에도 요청이 번갈아 도착할 수 있다.


    4. 빠른 CPU와 그에 반해 100만배 정도 느린 I/O장치 간 속도 차이를 어떻게 극복할 수 있을까?
      : 인터럽트, 캐싱

      캐싱 - 이미 한번 디스크 등에서 처리한 데이터를 캐시에 담아서 빠르게 접근 가능 하도록 함.

      인터럽트 - cpu가 디스크에 데이터를 요청 해두고, 다른 프로그램으로 넘어가 다른 일을 진행한다.
                       여기서 요청해놨던 디스크 장치에서 작업을 다 처리하면 I/O(디스크) controller가 CPU에게 인터럽트를 요청함.
                       CPU가 인터럽트 체크를 해서 인터럽트가 들어왔으면 자동적으로 CPU가 운영체제로 넘어간다.
                       운영체제에서 I/O controller에 요청했던 프로그램으로 CPU를 넘겨준다.         
                       (CPU는 한 클럭마다 기계어를 읽고, 인터럽트를 체크하는 로직을 반복 함.)


 

프로세스의 상태

프로세스: 실행되고 있는 프로그램

 

프로세스의 상태

  1. 운영체제에서는 CPU 큐에 프로그램을 대기 시켜 놓는다.

  2. CPU스케줄링을 통해 현재 실행중인 프로그램을 또 큐에 넣어놓고, 다음 프로그램을 실행 시키고를 반복한다.

  3. 그러다가 어떤 프로그램에서 "디스크에 있는 파일을 읽어와야 한다."라는 기계어가 있으면,
    해당 프로그램은 CPU에서 디스크 입출력 큐로 넘어가게 된다.
    3-1. 디스크 스케줄링을 통해 파일을 다 읽어오면, 디스크 컨트롤러가 인터럽트를 걸어서 CPU에게 알려 준다.
    3-2. CPU가 운영체제로 넘어가고 파일을 읽어오는 처리가 끝난 프로그램을 디스크 큐에서 CPU 큐로 이동 시켜준다.

  4. CPU는 다음 프로그램으로 넘어간다.

'ComputerScience > OS' 카테고리의 다른 글

5. 프로세스 관련 시스템콜 & IPC  (0) 2022.12.28
4. 프로세스(2)  (0) 2022.12.26
3. 프로세스(1)  (0) 2022.11.08
2. 컴퓨터시스템 구조(2)  (0) 2022.11.06
[OS] Process Memory와 Thread  (0) 2022.08.03