728x90

운영체제


일반적으로 자원관리자(resource)라고 정의 됨

- 컴퓨터에 있는 CPU, Memory, disk 등의 자원을 관리

 



운영체제의 초기 상태



그림1 . 운영체제 초기 상태


운영체제는 CPU, 메모리, 디스크라는 3개의 자원을 관리

현재 각 자원은 아무도 사용하지 않는 상태(예로 처음 운영체제를 설치한 상태)로 가정

 

사용자가 문서 편집, 인터넷 검색, 프로그램 작성, 게임 등의 작업을 수행하면, 이를 위해 필요한 자원을 운영체제가 제공

 


     

그림 2. 운영체제 동작 방식



c언어 프로그램 작성


1. 편집기를 이용하여 간단한 c언어 프로그램 작성하고 저장하면, 사용자의 저장 요청은 운영체제로 전달


2. 운영체제는 비휘발성 저장 매체인 디스크에 이 프로그램을 저장

- 일반적으로 저장되는 내용은 파일(file)이라는 객체로 관리


3. 운영체제는 우선 디스크의 일부 공간을 할당 받음

- 일반적으로 4KB 크기의 공간(디스크 블록)을 할당 받음


4. 할당 받은 공간에 파일의 내용을 저장


5. 파일의 속성 정보를 저장하기 위한 공간을 디스크에 할당 -> 이 공간을 inode라고 표현

- 만들어진 시간, 만든 사람, 접근 제어 정보 등


6. c언어 프로그램과 inode간에 연결을 만들고, inode와 파일의 내용이 들어있는 디스크 블록을 연결

- 파일 이름만 알면 그 파일에 포함된 내용, 파일을 만든 시간 정보 등을 찾을 수 있음

 


c언어 프로그램을 컴파일 하여 수행 가능한 바이너리 생성


1. c언어 프로그램을 컴파일러를 사용하여 수행 가능한 바이너리 파일로 만듬

- 리눅스 환경에서는 컴파일 후 만들어 지는 바이너리의 기본(default) 이름이 ‘a.out’

- 운영체제 입장에서 이 바이너리는 a.out이라는 이름을 갖는 파일


2. 운영체제는 디스크에서 디스크 블록을 할당 받아 파일 내용을 기록


3.  inode를 할당받아 여기에 파일의 속성 정보를 기록


4.  파일 이름과 inode와 디스크 블록을 연결

- a.out의 크기가 7KB이고, 디스크 블록의 사이즈가 4KB라면 2개의 디스크 블록이 필요

 


컴파일 이후 만들어진 a.out 바이너리 수행


바이너리를 수행하면 그 결과 태스크(task)라는 새로운 객체가 생성됨

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

기존에 존재하던 태스크들(prev task)과 서로 경쟁하며 CPU를 사용하려 함

운영체제는 CPU 자원을 모든 태스크들에게 공평하게 나누어 주려고 노력

- 다양한 스케줄링 기법이 적용될 수 있음

- ex) 라운드 로빈(round robin) 방식

바이너리 파일이 태스크로 수행되려면, 파일을 구성하는 내용이 메모리로 적재(load) 되어야 함

- CPU는 디스크를 직접 접근 불가능 -> 디스크의 내용이 메모리로 적재 되어야 함

- 이를 위해 운영체제는 메모리 자원도 관리 해야 함


1. 새로운 태스크는 메모리의 일부 공간(페이지 프레임)을 할당 받음


2. 바이너리 파일의 수행 이미지를 적재


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


      


 


728x90

'Linux > 커널&OS' 카테고리의 다른 글

특정버전 커널 설치  (0) 2018.12.21