본문 바로가기
Linux/Kernels

리눅스 커널

by neohtux 2016. 8. 31.
728x90

운영체제란?

 - 자원 관리자(resource manager)


 자원(resource)이란?

   운영체제가 관리해야 할 자원은 크게

      - 물리적 자원 : CPU, 메모리, 디스크, 터미널, 네트워크 등 시스템을 구성하고 있는 요소들과 주변 장치


      - 추상적 자원 : CPU를 추상화시킨 태스크(task), 메모리를 추상화시킨 세그먼트와 페이지, 디스크를 추상화시킨 파일,

                          네트워크를 추상화 시킨 통신 프로토콜, 패킷 등이 있다.



      - 물리적인 자원에 대응되지 않으면서 추상적인 객체로만 존재하는 자원 : 보안(security), 사용자 ID에 따른 접근제어(access control)등



cpu라는 물리적인 자원을 태스크라는 추상적인 자원으로써 제공해주는 태스크 관리자가 존재하며,


메모리를 세그먼트나 페이지라는 개념으로 제공해주는 메모리 관리자,


디스크를 파일이라는 개념으로 제공해주는 파일시스템, 네트워크 장치를 소켓이라는 개념으로 제공해주는 네트워크 관리자,


그리고, 각종 장치를 디바이스 드라이버를 통해 일관되게 접근하도록 해주는 디바이스 드라이버 관리자 등 크게 5가지 부분으로 나뉜다.



조금 더 구체적으로 태스크 관리자는 태스크의 생성, 실행, 상태 전이, 스케줄링, 시그널 처리, 프로세스 간 통신 등의 서비스를 제공한다.


메모리 관리자는 물리메모리 관리, 가상 메모리 관리, 그리고 이들을 위한 세그멘테이션, 페이징, 페이지 부재 결함 처리 등의 서비스를 제공한다.


파일 시스템은 파일의 생성, 접근 제어, inode 관리, 디렉터리 관리, 수퍼 블록 관리 등의 서비스를 제공한다.


네트워크 관리자는 소켓(socket) 인터페이스, TCP/IP 같은 통신 프로토콜 등의 서비스를 제공한다.


디바이스 드라이버는 디스크나 터미널,CD,네트워크 카드 등과 같은 주변 장치를 구동하는 드라이버들로 구성된다.



그럼 운영체제는 무엇을 위하여 이렇게 자원을 관리하는 것일까? 사용자에게 서비스를 제공하기 위해서이다.

사용자는 유저레벨에서 동작하는 태스크를 의미하며, 서비스는 시스템 호출(system call)을 의미한다.


따라서, 운영체제는 시스템 호출을 통해 태스크가 자원을 사용할 수 있게 해주는 자원관리자인 것이다.



□ 운영체제 동작 사례



이 그림에서 운영체제는 CPU, 메모리, 디스크라는 3개의 자원을 관리하고 있다.


현재 각 자원은 아무도 사용하지 않는 상태로 가정하고 있으며, 따라서, 텅비어있다, 이제 사용자가 문서 편집, 인터넷 검색, 


프로그램 작성, 게임등의 작업을 수행하면 이를 위해 필요한 자원을 운영체제가 제공해 주게 된다.





간단한 c언어로 짠 프로그램으로 동작 사례를 보자면,


우선, 점선을 기준으로 왼쪽은 유저레벨 오른쪽은 커널레벨에서 동작하게 된다.


사용자가 유저레벨에서 자신이 작성한 프로그램을 저장하면, OS는 비휘발성 저장 매체인 디스크에 이 프로그램을 저장하게된다.


일반적으로 저장되는 내용은 파일이라는 객체로 관리되며, OS는 우선 디스크의 일부 공간을 할당받는다 (일반적 4KB의 디스크 블록)


그리고,  여기에 파일의 내용을 저장한다. 


또한 메타데이터(생성된 시간, 생성자,접근제어 정보 등)를 저장하기 위한 공간을 디스크에 할당한다. 


이 공간이 그림에 보이는 inode라고 표현 했다. 


마지막으로 파일 이름과 inode간에 연결을 만들고 파일의 내용이 들어있는 디스크 블록을 연결한다.


따라서, 파일 이름만 알면 그 파일에 포함된 내용, 파일을 만든시간 정보 등을 찾아 갈 수 있다.


이후, 밑에 컴파된 바이너리 파일을 수행하면 태스크(task)라는 새로운 객체가 생성된다. 


이 객체는 수행 중인 프로그램으로 정의되고, 살아 움직이며  활동하는 객체다.


그리고 기존에 존재하던 태스크들과 서로 경쟁하며 CPU를 사용하려고 하는데, 


OS는 CPU 자원을 모든 태스크들에게 공평하게 나누어 주려고 노력한다.


대표 적인방법에 라운드 로빈(round-robin)이라는 방식인데, 이것은 한 태스크가 정해진 시간동안 CPU를 사용하고,


그 시간이 지나면 다음 태스크가 CPU를 사용하고, 하는 단계가 반복적으로 모든 태스크들에게 적용되는 스케줄링 방식이다.



CPU는 디스크에 직접 접근할 수 없으며, 디스크의 내용이 메모리로 적재되어야하는데,


이를 위해 OS는 메모리자원도 관리를 해야하며, 새로운 태스크가  메모리 일부 공간(페이지 프레임[가상 메모리를 분할한 최소 단위]을 할당 받게된다.


그리고 각 태스크는 세그먼트 테이블과 페이지 테이블을 이용해 자신에게 할당된 페이지 프레임을 관리하게 된다.






300x250

'Linux > Kernels' 카테고리의 다른 글

태스크(task)관리-(5)  (0) 2016.09.02
태스크(task)관리-(4)  (0) 2016.09.02
태스크(task)관리-(3)  (0) 2016.09.01
태스크(task)관리-(2)  (0) 2016.08.30
태스크(task)관리-(1)  (0) 2016.08.29

댓글