운영체제의 개요

운영체제(Operating System, OS)란?

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

사용자가 각종 소프트웨어를 편하게 이용하게 해준다.(메모리관리 등)


운영체제의 목적

1. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공

  • 운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상(illusion)을 제공

  • 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행

2. 컴퓨터 시스템의 (한정된)자원을 효율적으로 관리

  • CPU, 메모리, I/O(입출력) 장치 등의 효율적 관리

메모리 : CPU의 작업공간. 프로그램이 실행되면 메모리에 반드시 올라간다.
   → 주어진 자원으로 최대한의 성능을 내도록 함 => 효율성
   → 특정 사용자/프로그램의 지나친 불이익이 발생하지 않도록 함 => 형평성

  • 실행중인 프로그램들에게 짧은 시간씩 CPU를 번갈아 할당

  • 실행중인 프로그램들에 메모리 공간을 적절히 분배 (메모리의 공간은 유한하다.)

  • 사용자 및 운영체제 자신의 보호

운영체제의 기능

  • 운영체제는 컴퓨터가 실행되고나서부터 종료되기 전까지 계속 돌아간다.(커널)

  • 메모리에 상주하면서 운영체제의 목적을 수행한다.

입출력장치 : 디스크, 키보드, 프린터, 모니터 등 입력과 출력을 담당하는 장치들

각 입출력 장치에는 I/O 컨트롤러가 있다. CPU가 I/O 장치의 입력을 요구하게 될 때는, CPU 가 직접 갈 일 없이 해당 입출력장치의 컨트롤러가 I/O장치로부터 입력을 받아 메모리에 저장한다. 디스크는 CPU에 비해 대단히 느린 장치다.
디스크에 들어온 요청을 어떻게 순서로 처리할지 정하는 것을 디스크 스케줄링이라고 한다.

디스크 스케쥴링

여러 프로그램들이 CPU를 번갈아 가면서 쓰듯이 IO 장치에도 요청이 여러 프로그램으로부터 번갈아 도착할 수 있다. A, B, C 프로그램에게 요청이 들어왔을 때 순서대로 처리해도 되지만, 그것은 굉장히 비효율 적이다.
운영체제라는 것은 자원의 효율성을 추구하기 때문에 디스크도 요청이 들어온 순서보다는 효율성을 따져가며 처리한다. 마치 엘리베이터와 같다. 디스크 내부에는 엘리베이터처럼 이동할 수 있는 디스크 헤드가 존재하고 있다.

만약 100층에 있는 엘레베이터의 버튼이 100층->1층->90층->2층 순서로 눌렸다고 가정하자. 버튼이 눌린 순서대로 엘리베이터가 이동하면 굉장히 비효율적이다.
100층에서 1층으로 내려가는 사이 90층과 2층을 들려서 1층으로 도착하는 것이 효율적인 것처럼 디스크도 순서보다는 효율성을 따져서 서비스한다.

CPU 스케쥴링

CPU 스케쥴링이란 즉 이런것이다.
어떤 프로그램에게 CPU 사용권을 줄까?
한정된 메모리 공간을 여러 프로그램들한테 얼만큼 쪼개서 할당 할 것인가?
얼마만큼의 시간을 사용하게 할것인가?

CPU를 사용하는 프로그램들은 적지 않기 때문에 CPU는 시간, 공간적인 스케쥴링을 해야한다. 하지만 CPU 는 하드웨어고, 생각할 수 있는 기능이 있지 않다. 이걸 구현하기 위한 역할을 운영체제가 담당한다.
CPU라는 자원을 가만히 두지 않고 계속 일하게 돌리는 것이다.

운영체제는 CPU를 어떤 한 프로그램이 독점적으로 사용할 수 없도록 해당 할당 시간이 지나면 빼앗아올 수 있는 기능을 구현합니다. 하지만 그 프로그램이 CPU를 독점적으로 쓰는 시간동안 운영체제 혼자 어떻게 할 수는 없다. 그걸 막기 위한 하드웨어적인 장치랑 협조를 해서 CPU 스케쥴링을 하고 있다.

== 메모리관리, 즉 한정된 메모리 공간을 여러 프로그램들 한테 얼만큼 쪼개서 얼마큼의 시간을 할당 할 것인가를 결정하는 것이 운영체제다.


메모리관리

한정된 메모리를 어떻게 쪼개어 쓰지?
먄약 A 프로그램이 CPU를 사용하고 있는 상황에서, 입출력장치인 디스크에게 어떠한 파일을 요청을 했으면 그 프로그램은 그 파일이 읽혀지기 전까지 대단히 긴 시간동안 뭘 할 수가 없다. 그래서 CPU는 다른 프로그램에게 넘어간다.
그래서 프로그램 B가 CPU를 쓰면서 실행을 쭉 하다가 B도 디스크에 어떤 파일을 요청하면 CPU는 기다리는 시간동안 C 프로그램에게 넘어가는 식이다.


인터럽트, 캐싱

빠른 CPU와 느린 I/O장치간 속도차이를 어떻게 극복(완충)하지?

  • 캐싱

메모리 내의 캐시메모리에 기존에 요청해서 받았던 데이터를 복제 해두는 것
추후에 다시 똑같은 메모리가 필요할 때, 디스크까지 가지 않고 메모리에 복제본으로 잠시 저장해 놓았던 것을 읽는 것이다.

  • 인터럽트

A 프로그램과 B프로그램이 있고, CPU는 현재 A프로그램에게 할당되어 있다고 가정하자. B는 대기상태이다.
CPU에서 실행중인 A 프로그램이 I/O 요청을 하게 되면, CPU가 직접 I/O 작업을 하는 것이 아니고 I/O 장치에 붙어있는 작은 CPU들 컨트롤러한테 부탁을 한다. 부탁을 한 후 CPU는 무엇을 할까? 참고로 CPU는 디스크보다 속도가 약 100만배 정도 빠르다. 그래서 CPU가 컨트롤러들한테 일을 시키고 나서 결과를 받을 때까지 가만히 기다리는 것은 굉장한 자원의 낭비라고 할 수 있다. 즉 A 프로그램은 I/O 요청을 처리하느라 시간이 오래 걸리지만, B 프로그램은 지금 I/O를 하지 않고 CPU만 얻으면 바로 실행할 수 있기 때문에 CPU는 B한테 넘어간다. CPU 스케쥴링에도 포함되는 개념이다.

그렇다면 B에게 CPU를 넘겨준 A가 I/O 처리를 다 하면 어떻게 될까?
CPU에게 요청한 파일이 다 읽혀졌다고 전달을 해야하는데, 인터럽트라는 방법을 통해서 전달한다. 컨트롤러가 CPU한테 인터럽트 라는 것을 걸어서 완료됐다는 것을 알려주고, CPU는 매번 기계어를 실행하고 있지만 기계어 실행 하나가 끝나고 나면 인터럽트 체크라는 것을 한다. 인터럽트 들어온 것이 있는지 확인한다. 인터럽트가 들어온 것이 확인이 되면, CPU는 자동적으로 운영체제한테 무조건 넘어가게 되어 있다.

운영체제는 CPU한테 인터럽트가 들어온 이유를 보고 자기 할 일을 한다.(CPU 스케쥴링)

즉, A프로그램이 CPU가 요청한 파일을 다 읽었으니 이제 A프로그램은 CPU를 얻어도 되겠구나! 라고 판단하여 CPU 스케쥴링의 다음번에 A프로그램이 CPU를 얻을 수 있도록 하는 것이다.

프로세스의 상태

CPU가 하나밖에 없기 때문에 매번 매순간 CPU에서 기계어를 실행하는 프로그램이 있을것이다. 나머지 프로그램들은 CPU를 쓰고 싶은데 하나밖에 없기 때문에 못쓰고 기다리고 있는 상태이다. 그래서 운영체제는 이렇게 CPU 큐를 만들어서 CPU를 쓰고자 하는 프로그램들을 줄세워 놓는다.
CPU스케줄링을 운영체제가 실행하는데, CPU 큐에서 대기중인 프로그램들을 순서대로 짧은 시간동안 CPU를 쓰게 한 다음에 다시 빼내서 CPU 큐에 줄세우는 방식으로 실행한다.

CPU에서 실행중인 어떤 프로그램이 디스크에 파일을 요구하게 되면, 오랜 시간을 기다려야 하기 때문에 CPU에서 쫓겨난다. 쫓겨난 프로그램은 I/O를 요청을 처리하기 위해 디스크 입출력 큐에 줄을 서게 되고, CPU는 다음 프로그램에 바로 넘어간다.

I/O 요청작업이 끝난 프로그램은 CPU에게 인터럽트를 걸고, CPU가 자동으로 운영체제로 넘어가게 되면, 운영체제는 인터럽트 내용, 이유를 확인한 후 프로그램을 다시 CPU 큐에 넘겨주는 역할을 한다.
사람이 키보드를 두드리면 키보드 컨트롤러가 CPU에게 인터럽트를 걸어 키보드에 입력이 들어온 사실을 알린다.
CPU가 운영체제로 넘어가면, 운영체제는 키보드 입력으로 들어온 데이터를 메모리로 카피해서 프로그램이 사용할 수 있게 해준다.

참고 : kowc강의 - 운영체제(이화여대 반효경 교수님)

profile
기록하는 사람

0개의 댓글