ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • What is Operating System?
    Linux Kernel/Basic 2019. 1. 16. 12:55
    OS(Operating System)이란?

    매우 복잡한 소프트웨어이다.

    운영체제는 일반적으로 자원 관리자(Resource manager)라고 정의된다.
    CPU, 메모리, 디스크 등이 이 자원에 해당한다.

    사용자가 C 프로그램을 작성하고, 컴파일하여, 생성된 바이너리를 실행할 때 OS가 어떻게 동작하는지 살펴보자.

    [원시 OS의 형태]

    그림은 OS의 기본적인 형태이다.
    앞서 설명했듯이 OS는 자원에 해당하는 CPU, Disk, Memory등을 관리한다.

    # 1. 사용자가 C코드를 작성했을 때


    점선을 기준으로 위는 사용자 수준의 동작이고, 아래는 커널 수준의 동작으로 봐도 무관하다.

    # 2. 해당 C 파일을 저장했을 때


    test.c를 저장하는 사용자의 요청은 운영체제에 전달이 되고, 운영체제는 비휘발성 저장 매체인 디스크에 이 프로그램을 저장한다.
    일반적으로 저장되는 내용은 file이라는 객체로 관리가 된다.

    운영체제는 디스크의 일부 공간을 할당 받는다.
    일반적으로 4KB 크기의 공간을 할당 받고, 이를 디스크 블록이라 한다.

    이렇게 받은 디스크 블록에 파일의 내용이 저장된다.
    그리고 파일의 속성 정보(만들어진 시간, 만든 사람, 접근 제어 정보 등)를 저장하기 위한 공간을 디스크에 할당 받는다.

    속성 정보를 저장하기 위해 할당받은 공간을 inode라고 하고 마지막으로 inode와 파일의 내용을 연결하여 파일 이름만 알면 그 파일에 포함된 속성 정보도 알 수 있게 한다.

    # 3. 저장한 C 파일을 컴파일


    사용자가 저장한 test.c파일을 컴파일 과정을 거쳐서 a.out이라는 이름을 가진 바이너리를 생성한다.
    (참고. 리눅스 환경에서 컴파일 후에 만들어지는 바이너리를 기본(default) 이름이 a.out이다)


    커널 레벨에서 이를 본다면 다음과 같이 실행파일의 속성 정보가 들어간 inode를 할당 받고, 실행 파일은 디스크 블록을 할당받아 기록을 한다.
    아까 작성한 C 파일의 경우 컴파일 과정을 거쳐도 4KB를 넘지 않아 하나의 디스크 블록이면 충분히 기록을 할 수 있지만

    만약 4KB를 넘는 크기를 갖는 바이너리라면 다음 그림과 같이 2개의 디스크 블록을 할당 받아 기록하게 된다.


    # 바이너리 실행

    다음은 이렇게 컴파일한 바이너리를 수행하는 과정을 보여준다.


    바이너리를 실행하면 결과적으로 task라는 새로운 객체가 생성되고, 기존에 존재하던 task들(prev_task)이 서로 경쟁하며 CPU를 사용하려고 한다.
    OS는 CPU자원을 모든 task들에게 공평하게 나눠주려고 노력한다.

    대표적인 방법으로 Round-Robin이라는 방식이 사용된다.
    이는 정해진 시간동안 한 task가 CPU를 사용하고, 일정 시간이 지나면 다음 task가 CPU를 사용하는 식으로 반복적으로 모든 task들에 적용이되는 스케줄링 방식이다.

    * 스케줄링 : 다중 프로그래밍을 가능하게 하는 운영체제의 동작기법 / CPU작업 + 입출력 작업을 병행하는것.

    모든 프로그램은 메모리에 적재되어야하듯
    하나의 바이너리가 task로 수행되기 위해서 메모리에 로드된다.

    CPU는 디스크를 직접 접근할 수 없으며, 디스크의 내용이 메모리로 로드되어야한다.
    이를 위해서 OS는 메모리 자원도 관리 해야 한다.


    우선 task는 메모리의 일부 공간(page frame)을 할당 받고,
    여기에 바이너리 파일의 수행 이미지를 로드한다.

    그리고 각 task는 세그먼트 테이블과 페이지 테이블을 이용하여 자신에게 할당된 page frame을 관리한다.


    오늘은 이렇게 단순했던 OS가 사용자의 동작에 의해 바쁘게 움직이는 모습을 살펴봤다.

    커널익스를 위해 기초를 다지자...! :)
    반응형
Designed by Tistory.