운영체제란 무엇인가
운영체제란 무엇인가?
하드웨어를 손쉽게 그리고 효율적으로 사용할 수 있는 abstraction을 제공하는 시스템 소프트웨어
하드웨어 - 추상화된 개념의 관계
- CPU - process
- Memory - address
- Disk – file
- Network - port
- 손쉽게 : 문서를 디스크에 저장하는 동안 사용자는 해당 문서가 디스크의 어떤 물리적인 위치에 저장되는지 몰라도, 손쉽게 저장할 수 있도록 돕는다.
- 효율성 : 자원(하드웨어)를 기기의 사용 의도에 맞게 최대한 효율적으로 공유, 분배하려면 정책(policy)이 필요하더. 가장 대표적인 예로는 FIFO, LRU가 있다. 세상에서 가장 큰 효율을 제공하는 정책은 존재하지 않고, 사람들은 각 하드웨어가 어떤 의도로 사용되는 지에 따라 정책을 다르게 설정한다. 이러한 일련의 정책 결정들을 설계 결정(design decisions)이라고 부른다. 정책의 효율성을 따지려면 이 하드웨어의 용도를 기준으로 평가해야 한다.
- abstraction는 하드웨어를 추상화한다는 의미를 갖지만, 반드시 실제 구현이 되어야 한다. 구현이 되지 않고, 우리 머릿속에만 존재할 수 있는 철학과 같은 것은 concept일 뿐이다.
Process
-
Program
- 컴퓨터를 실행시키기 위한 일련의 순차적으로 작성된 명령어의 모음
- 컴퓨터 시스템의 disk와 같은 secondary storage에 바이너리 형태로 저장되어 있다.
-
프로세스
-
실행되고 있는 프로그램(program in action)의 추상화(abstraction)
프로그램은 하나이지만 프로세스는 여러개일 수 있다. 예를 들어, 우리가 컴퓨터에 띄우고 있는 창 하나하나가 프로세스이다. 평소에는 프로그램이 디스크에 있다가 메모리에 올라와서 수행을 하기 시작하면 그때부터 프로그램은 프로세스가 된다. 프로그램이 수행되려면 Program Counter, Stack, Data Section 등이 필요하다.
-
Address Space
- Address Space
- Process가 차지하는 메모리 공간
- 이 개념이 필요한 이유 : 프로세스가 서로의 주소 공간을 침범할 수 없도록 해야 하기 떄문이다. 예를 들면, 카톡 프로세스가 유튜브 프로세스 주소 공간에 접근하면 안된다. 그런 성질을 제공하는 추상화가 Address Space이다.
- File
- 프로세스에서 읽고 쓸 수 있는 Persistent Storage
- 이 개념이 필요한 이유 : Persistence 어떤 데이터는 기기의 전원이 꺼져도 하드웨어에 저장되도록 해야 하는데, 이를 Persistence라고 한다. Address Space는 기기의 전원이 꺼지면 함께 사라지므로, Address Space는 Persistence를 제공하지 않는다. 이 기능을 제공할 수 있도록 하는 추상화 개념이 File이다.
- Port
- 컴퓨터간에 메시지를 주고 받는 Communication Endpoint
- 이 개념이 필요한 이유 : 데이터가 한 공간에서 다른 공간으로 전달될 때에는 네트워크를 거쳐야 한다. 이때 운영체제가 제공하는 Port라는 Abstraction을 통해서 데이터가 한 컴퓨터 안에 존재하는 다양한 프로세스들 중 원하는 프로세스로 목적지를 특정할 수가 있게 된다. 즉, 특정 프로세스가 다른 프로세스의 물리적인 위치를 모르더라도, Port를 보고, 데이터를 정확한 프로세스로 전달할 수가 있다.
Software의 구분
- System Software
- 목적 : 컴퓨터 시스템을 구동시키는 Software
- OS 이외의 System Software : Compiler/Assembler
- 목적 : 컴퓨터 시스템을 구동시키는 Software
- Application Software
- 목적 : 특정 용도로 사용됨
- AI 인식기, 빅데이터 처리기, Word, Internet Explorer
- 매우 다양한 응용 프로그램이 존재하며, 대부분 OS 위에서 돌아간다.
- 목적 : 특정 용도로 사용됨
운영체제의 특징(applcation과 비교)
- OS는 항상 동작 중에 있다.
- 하드웨어에 OS가 하나만 있다고 가정할 때, OS는 항상 동작하고 있으며, 동작하지 않으면 컴퓨터가 죽은 상태라고 할 수 있다.
- 제어 기능으로서 항상 자원에 대한 감시 활동을 한다.
- Supervisor mode (<-> User mode) 자원을 분배 및 공유하고 있기 때문에 OS는 이것을 전반적으로 제어할 수 있어야하므로 항상 Supervisor mode이어야 한다. Application(User mode)과 동등한 권한으로 동작한다면 해킹에 취약할 수 있으므로, OS는 늘 Application들과 분리되어 독립적으로 동작해야 한다.
- 하드웨어에 대한 제어 기능
- Device Driver OS만이 하드웨어를 제어할 수 있다. Application은 하드웨어를 제어할 수 없으며, 오로지 OS에게 이를 요청함으로써 하드웨어를 제어할 수 있다. 예를 들어, 특정 어플리케이션이 디스크에 접근하려면 OS를 호출해야 한다.
OS와 Kernel
-
OS와 Kernel의 두 가지 관점
-
OS = Kernel 커널과 OS가 동의어로 쓰이는 경우에 해당한다.
-
OS = Kernel + windows system(GUI) + Library
- Kernel : 운영체제의 핵심 부분으로, 자원 할당, 하드웨어 인터페이스, 보안등을 담당한다.
- Windows System : 윈도우 형태의 그래픽 사용자 인터페이스 예) OpenGL
- Library : 서브루틴과 자주 사용되는 함수들의 집합 예) libc, win32, dll
OS를 커널과 라이브러리, 그리고 GUI의 조합으로 통칭하는 경우에 해당한다. 예를 들어, 안드로이드는 리눅스 커널에 GUI와 라이브러리를 더한 OS라고 할 수 있다.
-
Relation of Hardware, OS and Application
여러 라이브러리를 통해 커널에 접근이 되는 구조
하드웨어를 운영체제가 감싸고 있고, 여러 라이브러리가 존재하는데 이 중 System call을 통해서 어플리케이션이 커널로 들어오는 구조를 취한다. 예를 들어, 카카오톡 어플리케이션 메시지를 전송하기 위해 함수 호출(라이브러리, System call)을 통해 커널을 요청한다. 그러면 커널이 그에 응답하여 패킷을 만들고 하드웨어를 전달한다. 메시지는 하드웨어를 통해서 바깥으로 나가고, 인터넷을 거쳐 다른 기기에 도착하는 것이다. 어플리케이션은 절대 하드웨어를 제어할 수 없고, 언제까지나 운영체제를 통해서만 가능하다. 또한 어플리케이션은 함수 호출 없이 운영체제에 요청할 수도 없다. 정형화된 라이브러리들은 편리하지만, 정의된 것 이상의 복잡한 제어를 하기는 힘들기 때문에 커널에 직접 접근이 가능한 조치를 취해줘야 한다.
어플리케이션이 커널로 들어가기 위해서는 모드를 User mode에서 Supervisor mode로 바꿔줘야 한다. 이 과정에서 어셈블리어로 된 코드가 실행되는 데, 이 복잡한 과정을 라이브러리가 숨겨준다.
운영체제가 쓰이지 않는 곳은?
-
PC
- TV
- 원자력 발전소
- 우주선
- 게임기
- 은행
- 스마트 폰
- 냉장고
- 자동차
- 스마트 “빌딩”
- 블록체인
- 5G 장비
- IoT (internet of things) 클라우드 (cloud)
운영체제는 모든 곳에서 사용되고 있다.
Comments