우리가 사용하는 컴퓨터의 운영체제는 사실상 컴퓨터의 하드웨어(기기) 와  사용자가 이용하는 응용프로그램까지에

있어 매우 중요한 역할을 한다.

실제로 운영체제가 없는 컴퓨터는 사용할 수 없다.

 

컴퓨터 시스템 조직도

 

그렇다면 운영체제의 역할은 크게 무엇이 있을까

운영체제는 사용자가 알기힘든 각종 하드웨어를 직접 관리하며, 사용자에게는 편리한 인터페이스를 제공한다.

실제로 우리가 바탕화면에서 아이콘을 클릭하고, 창으통해 인터넷 서핑을 할수있다는것 또한 윈도우 운영체제가 제공하는 기능이라 할 수 있다.

 

이렇게 자원을 직접 관리하는 자원관리자(Resource Manager)의 역할과 

사용자에게 편리한 인터페이스를 통해 파일을 손쉽게 저장하거나, 삭제 및 내용을 볼 수 있는 기능을 제공하는 

자원 추상화(Resource Abstraction)의 역할을 한다고 볼 수 있다.

 

여기서 자원을 관리한다 라는것은 CPU 프로세스들이 잘 돌아가게하고, 그 프로세스들이 실행되는 메인메모리를 

관리하며, 입출력 장치를 비롯한 하드웨어들을 관리하는것이라고 할 수 있다.

 

자원 추상화는 사용자들이 응용프로그램이 실행되는 커널영역(관리자영역)의 시스템동작을 몰라도, 사용자 인터페이스인CLI(Command Line Interface) 와 GUI(Graphicall User Interface) 및 모바일의 터치스크린 등을 제공해 편리하게 

시스템을 이용할수 있게한다.

가령 응용프로그램단의 printf문이 어떤식으로 커널영역으로 들어가, 하드웨어를통해 모니터로 출력하기까지의 과정을 사용자는 알아야할 필요가 없어진다.

 

운영체제는 이러한 기능 이외에도 네트워크 보호및 보안의 기능도 수행한다.

 

 

운영체제의 커널영역이란

 

이렇듯 운영체제는 사용자에게 편리한 시스템인터페이스를 제공함과 동시에 컴퓨터시스템을 제어하는 역할도 수행한다.

이중에서 우리는 컴퓨터시스템을 제어하는 영역인 운영체제의 커널영역에 대해 공부할것이다.

다음은 커널영역의 대표적인 4가지기능이다.

 

1.메모리관리

2.프로세스관리

3.디바이스관리

4.파일관리

커널영역의 4대기능

 

 

본격적인 운영체제공부에 앞서 우리가 사용하는 응용프로그램과 운영체제, 그리고 하드웨어까지 이어지는

구조를 한번 살펴보자.

 

 

 

 

먼저 사용자와 하드웨어 사이에 많은 요소들이 존재하고있다.

운영체제는 사용자영역과 하드웨어사이에서 시스템을 제어해주는가장 핵심요소라 할 수있고, 

사용자는 응용프로그램(게임을 한다던지) 및 shell ( 사용자가 운영체제 기능을 이용하기위한 인터페이스 - 터미널환경인 CLI와 그리픽 인터페이스 GUI가 있다) 을 사용하기위해 운영체의 기능을 이용해야 한다.

 

 

여기서 API와 시스템 콜이란, 

사용자가 응용프로그램 또는 쉘을 이용해 어떠한 명령을 한다고 가정하면, 이러한 명령은 시스템콜을 통해 운영체제의 커널영역으로 들어가게 된다. 이를 시스템콜(System call) 이라고 한다. 다시말해 사용자 프로그램단에서 운영체제의 기능을 이용하기위해 호출하는함수이다.

하지만 시스템콜이란 이러한 과정을 담고있는 함수이기떄문에 사용이 번거롭다. 따라서 System call을 제공하는 어떠한 라이브러리 혹은 함수의 형태로 API를 응용프로그램에게 제공한다.이렇게되면 API를 통해 비교적 쉽게 OS의 기능을 이용할 수 있게된다. 

 

가령 우리가 자주쓰는 c언어의 printf문도 운영체제에 접근해, 모니터로 출력을 하기위한 일종의 시스템콜 API라고 할 수 있다. 

 

하지만 이러한 API를 제공함에 있어 윈도우가 가지고있는 API와 리눅스의 POSIX API등의 규격이 다르기에, 우리는 윈도우에서 돌아가는 프로그램을 리눅스에서는 사용할 수 없게된다.

API란 더 넓은 뜻으로 사용되기도 하지만 여기서는 이렇게만 알아두고 넘어가도록 하자.

 

윈도우와 리눅스의 시스템콜