이 글은 공부를 하면서 알게 된 내용들을 기록하는 글입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!
✅ 운영체제(Operating System)이란?
운영체제(OS, Operating System)은
1️⃣ 컴퓨터 하드웨어를 관리하고,
2️⃣ 컴퓨터 시스템의 자원들을 효율적으로 관리하며,
3️⃣ 응용 프로그램과 하드웨어 간의 인터페이스를 지원하는 시스템 소프트웨어이다.
즉, 운영체제는 다양한 사용자를 위해 다양한 응용프로그램 간의 하드웨어 사용을 제어하고 조정하는 역할을 한다.
Windows, Linux, UNIX, max OS 등이 대표적인 운영체제의 예이다.
✅ 운영체제를 바라보는 관점
운영체제의 역할은 사용자의 관점(User view)와 시스템의 관점(System view), 두 관점에서 살펴볼 수 있다.
1️⃣ 사용자 관점(User view)
컴퓨터 시스템을 사용하는 사용자의 관점은 인터페이스에 따라 달라진다.
먼저 PC를 예로 들어보자. 사용자는 모니터, 키보드, 마우스와 같은 장치들을 통해 PC를 통해 작업을 하는 경우가 많다.
이러한 시스템은 주로 다수의 사용자보다 한 사용자가 사용하기 때문에, 대부분 사용의 편의성을 위해 설계되며 다양한 하드웨어와 소프트웨어 자원의 공유와 같은 자원의 이용에 대해서는 신경 쓰지 않는다.
다른 예를 들어보자. 동일한 컴퓨터에 연결된 터미널을 통해 작업하는 경우도 있다.
PC와는 달리 다수의 사용자가 존재할 수 있으며, 자원을 공유할수도 정보를 교환할 수도 있다.
이러한 경우에는 사용의 편의성보다는 자원 이용을 효율적으로 사용하는 것에 집중되어 설계되었을 것이다.
이처럼 어떤 사용자냐에 따라 운영체제의 역할은 달라질 수 있다.
2️⃣ 시스템 관점(System view)
시스템(컴퓨터)의 관점에서 운영체제는 하드웨어와 가장 밀접하게 연관된 프로그램이다.
컴퓨터 시스템은 CPU, 메모리, 저장공간, 입출력 장치 등으로 이루어져 있는데, 운영체제는 이들의 자원 관리자/할당자(Resource allocator)로서 동작하며, 작업 수행을 위해 필요한 자원을 할당한다.
✅ 운영체제의 대표적인 기능들
1️⃣ 사용자 인터페이스(UI, User Interface) 제공
대부분의 운영체제는 사용자 인터페이스(UI)를 제공한다.
인터페이스는 다양한 형태로 제공이 되는데, 제일 보편적인 방식은 GUI(Graphical User Interface)이다. Windows, Mac OS가 여기에 속한다.
문자열 명령어를 통해 시스템을 조작하는 CLI, 파일 형태로 입력되고 해당 파일이 실행되는 Batch interface가 있다.
2️⃣ 입출력 연산(I/O operation)
당연하지만 프로그램은 실행 도중에 입출력을 실행할 수 있다.
여기서 입출력이란 마우스, 모니터, 키보드와 같은 입출력 장치 외에도 파일 입출력 또한 포함된다.
운영체제는 입출력을 실행할 수 있는 방법을 제공해야 한다.
3️⃣ 파일 시스템 조작 (File system manipulation)
프로그램은 실행 도중에 파일(file)과 디렉터리(directory)를 읽고 써야 한다.
풀어서 설명하자면, 프로그램은 '이름'을 사용하여 파일과 디렉터리를 생성/삭제/조회할 수 있어야 한다.
또한 권한 관리를 이용하여 파일이나 디렉터리의 접근을 허가하거나 거부할 수 있어야 한다.
추가적으로 운영체제들은 특정한 특성과 성능 향상을 위해 다양한 파일 시스템을 제공한다.
4️⃣ 통신(Communication)
여기에서 이야기하는 통신은 크게 두 가지이다.
첫 번째는 컴퓨터 시스템 내에서 실행되고 있는 프로세스(Process)들 간에 일어나는 것을 이야기한다.
같은 시스템 내에서의 프로세스 통신은 IPC(Inter-process communication)과 같은 방법을 통해 이루어진다.
두 번째는 네트워크로 연결된 다른 컴퓨터 시스템에서 실행되는 프로세스(Process)들 사이에서 일어나는 것을 말한다.
이러한 통신은 공유 메모리(shared memory)나 메세지 전달(message passing)을 통해 이루어진다.
5️⃣ 오류 탐지 (Error detection)
운영체제는 일어날 수 있는 모든 가능한 오류에 대해 항상 인지할 수 있어야 한다.
오류는 CPU, 메모리, 입출력 장치, 사용자 프로그램과 같이 다양한 곳에서 일어날 수 있다.
운영체제는 정상적인 작동을 위해 발생할 수 있는 다양한 오류에 대해 적당한 조치를 취할 수 있어야 한다.
6️⃣ 자원 할당(Resource allocation)
다수의 사용자 혹은 다수의 작업들의 동시에 실행될 때, 각각의 process들에게 자원을 공평하고 효율적으로 할당해야 한다.
컴퓨터 시스템에 있는 자원들은 한정적일 수밖에 없다.
예를 들어 CPU라는 한정된 자원을 효율적으로 사용하기 위서는 CPU 스케줄링 루틴 등을 사용하여 자원을 알맞게 할당해야 한다.
7️⃣ 보호(Protection)와 보안(Security)
보호(Protection)는 실행되고 있는 서로 다른 프로세스들이 서로에게 영향을 끼치지 않도록 막는 것을 이야기한다.
프로세스 A와 프로세스 B가 같이 실행되고 있다고 가정했을 때,
프로세스 A와 프로세스 B 각각은 운영체제 자체에게 방해가 돼서는 안된다.
여기에 더해 프로세스 A의 동작이 프로세스 B에게 영향을 주어서는 안 되고, 반대로 프로세스 B가 프로세스 A에게 영향을 주어서도 안된다.
보안(Security)은 컴퓨터 시스템을 외부의 부적절한 접근 시도로부터 지키는 것을 말한다.
✅ 참고 자료 & 링크
- Operating System Concepts Essentional 3판 - Chapter 1 ~ Chapter 2
- 위키백과 - 운영체제