티스토리 뷰

학교/운영체제

[01] 운영체제 - 운영체제란?

군옥수수수 2017. 9. 21. 14:47

안녕하세요
운영체제는 제가 프로그래밍 공부를 하면서 항상 궁금해했던 분야이기도 하며
어느 커뮤니티를 가도 중요하다고 말씀하시는 분야 중 하나입니다.
그래서 3학년이 돼서야 드디어 해당 과목을 수강할 기회가 생겼습니다.

오늘부터 앞으로 매 수업마다 듣는 내용을 요약하고 
나름대로 정리를 하여 복습 차원으로 이곳에 글을 올리려고 합니다.
처음 배우는 분야이고 과목인 만큼 부족한 부분이 많을 텐데 이해해주시면 감사하겠습니다.

그럼 바로 오늘 배운 내용을 정리해보는 시간을 갖도록 하겠습니다.
오늘은 전체적인 운영체제의 정의와 역할을 간단하게 요약해보겠습니다.

운영체제란 computer hardware(CPU, I/O)를 관리해주면서
동시에 여러 application들이
작동할 수 있는 환경을 제공해주는 software입니다.

OS의 역할

OS의 역할에는 크게 두 가지가 있습니다.

1. OS는 프로그램들이 자원을 필요로 할 때
자원을 할당해줍니다.
    (자원이란? CPU 시간, 메모리 공간, 파일 저장 공간, 입출력장치 등등)
2. OS는 각각 자원을 할당받은 프로그램들이 서로의 영역을 침범하지 않게 하고, 컴퓨터의 부적절한 사용을 방지하는
제어프로그램의 역할을 합니다.

컴퓨터에서 프로그램들이 돌아가기 위해서는 자원(resource)이라는 것이 필요합니다.
하지만 그 자원은 한정되어 있기 때문에 이것을 효율적으로 관리해주는 것이 바로 OS의 역할입니다.
또한 각각의 프로그램들이 각자에게 할당된 자원만을 사용해야지 다른 프로그램의 자원을 침범하거나 하는 행위 혹은 외부로부터 오는 컴퓨터에 대한 부적절한 사용의 접근 등을 방지하게 됩니다.

운영체제의 시작

컴퓨터가 처음 부팅될 때는 Bootstrap이라는 프로그램이 먼저 실행이 됩니다.
이 프로그램은 시스템의 모든 면을 초기화합니다. 그리고 OS를 메모리에 올려 실행되게끔 하며
OS는 실행이 되면서 이제 다음 event를 기다리게 됩니다. 
이러한 event를 시스템에서는
interrupt라고 부릅니다. 

(저는 이러한 event를 기다리는 event-driven 방식을 
이전에 한번 경험했는데요.  
바로 Node.js입니다. Node.js도 역시 마찬가지로 어떠한 event가 발생하였을 때 그에 해당하는 행동을 취해주는 그런 event-driven 방식을 사용하고 있습니다.)

예를 들어보면 
여러분들이 컴퓨터를 부팅시키면 처음부터 윈도우 마크가 화면에 나오지 않고 검정 화면에서 몇몇 글자들이 보였다가 윈도우 마크가 화면에 나타나게 됩니다. 이 과정이 바로 초기화를 한 후 OS를 메모리에 올려 실행시키는 과정입니다.
그리고 이제 윈도우가 실행이 되면서 잠금을 걸어놓으신 분들이라면 비밀번호를 입력하라는 창이 뜰 텐데 OS는 이 창을 띄우고 "비밀번호의 입력(입출력장치)"이라는 interrupt를 기다리게 됩니다. 그동안 OS는 아무 행동도 취하지 않으며 대기 상태입니다.

Interrupt의 과정

Interrupt가 발생을 하게 되면 ( ex :  키보드 입력) 제일 먼저 OS는 해당 명령어의 주소를 저장을 합니다. 그 유는 Interrupt의 대응하는 행위를 끝내고 다시 그다음 명령어를 수행하거나 다시 대기 상태로 돌아오기 위함입니다.
그리고 OS는 Interrupt Vector Table이라는 곳에서 해당 Interrupt에 대한 번호를 찾고 그리고 그 번호에 대응하는 행위는 Interrupt Vector Routine을 실행시킵니다.
IVR이 끝나고 나면 OS는 저장해 놓았던 주소로 되돌아가 다음 Interrupt를 기다리게 됩니다.

(Interrupt는 Hardware의 Interrupt를 말하며 Software는 Trap이라고 부른다.)

여기서 잠깐! 정확히 Hardware란 무엇일까요?

Hardware에 대해서 잠깐 알아보는 시간을 갖도록 할게요
Hardware는 입출력장치인  I/O와 해당 장치를 제어하는 controller로 이루어져 있습니다.

우리가 사용하는 키보드, 디스크에도 모두 controller가 있으며 이것들이 우리가 입력하는 데이터들을 본체에 전송을 하게 됩니다. 그리고 각 장치에 해당하는 OS에는 해당 Hardware와 데이터를 주고받기 위해 그 기기에 대한 Device Driver(D/D)가 필요합니다

여러분들이 핸드폰이나 usb를 연결할 때 드라이버 설치를 해야 한다는 알림 창이 뜨는데 바로 그때 드라이버가 D/D입니다. 

본체에서 보내는 데이터는 D/D의 buffer(데이터 전송을 위한 임시 저장 장치)에 저장되었다가 나가게 되고  I/O 장치에서 보내는 데이터 또한 controller의 buffer에 저장되었다가 전송됩니다. 이러한 전송 완료에 대한 메시지를 interrupt로 발생시킵니다.

하지만 이때 buffer의 용량은 상당히 작습니다. 그래서 적은 양의 데이터는 괜찮지만 대용량의 데이터 전송에는 문제가 생깁니다. 또한 빈번한 OS의 개입이 이뤄지게 됩니다. 
이러한 문제를 해결하기 위해 도입된 방안이 Direct Memory Access입니다.

DMA는 장치에 대한 연결의 interrupt를 발생시킨 후 OS는 모든 권한을 DMA에게 위임합니다. 그리하여 빈번한 OS의 개입이 없고 또한 전송 단위 또한 커서 빠르게 전송할 수 있게 됩니다.

다음 그림이 이해를 도울 수 있다고 생각합니다.

강의시간이 3시간이라 양이 너무 많아 여기서 끊고 
다음 시간에는 운영체제의 구조와 동작 방식을 간단하게 알아보는 시간을 갖도록 하겠습니다. 
감사합니다!



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함