ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [공룡책] Ch 2. 운영체제 구조
    공부/운영체제(OS) 2022. 4. 19. 17:17
    반응형

    이 글은 공룡책을 읽고 정리한 글입니다.


     

     

     

    0. 소개


    운영체제는 프로그램이 실행되는 환경을 제공해준다. 내부적으로 운영체제는 여러 다른 노선을 따라 구성되므로 각각의 노선마다 구조가 크게 차이가 난다. 그래서 운영체제를 설계하려면 여러가지 전략과 알고리즘을 잘 선택해야 한다.

     

    운영체제를 살펴볼 때 좋은 세가지의 관점이 존재한다.

    - 운영체제가 제공하는 서비스에 초점을 둔 관점

    - 운영체제가 사용자와 프로그래머에게 제공하는 인터페이스에 초점을 둔 관점

    - 시스템의 구성요소와 그들의 상호 연결에 초점을 둔 관점

     

    이번 장에서는 위의 관점들을 모두 살펴보면서 알아야할 내용들에 대해 다룰 예정이다.


     

     

     

    1. 운영체제 서비스


    운영체제 서비스에 초점을 둔 관점

    위 그림은 운영체제 서비스에 초점을 둔 관점으로 이런 서비스는 프로그래머가 프로그래밍 작업을 더 쉽게 수행할 수 있도록 한다.

     


    1. 사용자 인터페이스

     

    대부분의 운영체제는 사용자 인터페이스(UI)를 제공한다. UI 종류중 가장 일반적인 것이 그래픽 사용자 인터페이스(GUI)이다. 이런 인터페이스는 윈도 시스템으로 I/O를 지시하고, 메뉴에서 선택하고, 화면을 선택하는 포인팅 장치인 마우스와 텍스트를 입력할 키보드를 가지고 있다. 이외에도 터치 스크린 인터페이스도 있고, 명령어 라인 인터페이스(CLI)가 있는데, CLI는 명령을 사용하며 이를 입력할 방법이 사용된다. 보통 터미널, 가상 터미널을 통해 사용자와 상호작용하는 것을 뜻한다.


     

    2. 프로그램 수행

     

    시스템은 프로그램을 메모리에 적재하여 실행할 수 있어야 한다. 그리고 그 프로그램은 어떻게든 실행을 끝낼 수 있어야 한다.


    3. 입출력 연산

     

    수행중인 프로그램은 입출력을 요구할 수 있으며, 사용자들은 통상 입출력 장치를 직접 제어할 수 없다.

    그래서 운영체제가 입출력 수행의 수단을 제공해야 한다.


    4. 파일 시스템 조작

     

    프로그램은 파일을 읽기/쓰기가 가능해야 하고, 이름에 의해 파일을 생성/삭제할 수 있어야 하고, 지정된 파일을 열거나 파일의 정보를 열거할 수 있어야 한다.

    몇몇 프로그램은 파일 소유권에 기반을 둔 권한 관리를 이용하여 파일이나 디렉토리의 접근을 허가/거부를 할 수 있게 된다.

    그래서 운영체제는 다양한 파일 시스템을 제공한다.


    5. 통신

     

    한 프로세스가 다른 프로세스와 정보를 교환해야 할 필요가 있을 때 서로 통신을 한다.

    통신은 공유 메모리를 통해서 구현될 수 있고, 메시지 전달 기법을 사용하여 구현될 수 있다.

    메시지 전달 기법을 사용한다면 정보의 패킷들이 운영체제에 의해 프로세스들 사이를 이동하게 된다.


    6. 오류 탐지

     

    오류는 다양한 곳에서 일어날 수 있기 때문에 운영체제는 올바르고 일관성 있는 계산을 보장해야 하므로 각 유형의 오류에 대해 적당한 조치를 해야 한다.


    7. 자원 할당

     

    다수의 프로세스나 다수의 작업이 동시에 실행될 때 각각에 자원을 할당해야 한다. 

    운영체제는 다양한 종류의 자원을 관리하고 있고, 최대한 효율적으로 할당을 해야한다.

    예를 들어 CPU의 경우에 운영체제가 CPU 스케줄링 루틴이 CPU 속도, 반드시 실행할 프로세스, CPU 처리 코어의 개수와 같은 요인들을 고려하도록 만들어준다.


    8. 기록 작성

     

    어떤 프로그램이 어떤 종류의 자원을 얼마나 사용하는지 추적하기 위해 기록한다.

    이런 기록 관리는 회계나 사용 통계를 내기 위해 사용되며, 사용 통계는 컴퓨팅 서비스비를 개선하기 위해 시스템을 재구성하고자 할 때 귀중한 자료가 될 수 있다.


    9. 보호와 보안

     

    다중 사용자 컴퓨터 시스템 또는 네트워크로 연결된 컴퓨터 시스템에 저장된 정보의 소유자는 그 정보의 사용을 통제하기를 원한다.

    서로 다른 여러 프로세스가 병행하게 수행될 때, 한 프로세스가 다른 프로세스를 방해하면 안된다.

    보호는 시스템 자원에 대한 모든 접근이 통제되도록 보장하도록 필요로 하는 것이고, 보안은 외부로부터 부적합한 접근 시도를 차단하고, 모든 접속을 기록한다.


     

     

     

    2. 사용자와 운영체제 인터페이스


    사용자가 운영체제에 접촉하는 방식은 총 세가지가 있고, 이것에 대해 다룰 것이다.

    - 명령어 라인 인터페이스(CLI) 또는 명령어 인터프리터를 사용하여 직접 운영체제가 할 일을 명령어로 입력하는 것

    - 그래픽 기반 인터페이스

    - 터치 스크린 인터페이스


    1. 명령 인터프리터, 명령어 라인 인터페이스(CLI)

     

    운영체제 대부분은 명령 인터프리터를 프로세스가 시작되거나 사용자가 처음 로그온 할 때 수행되는 특수한 프로그램으로 취급한다. 이런 인터프리터는 셸(shell)이라고 부른다. 그래서 셸은 사용자와 커널 사이를 이어주는 역할을 하는 것으로 사용자가 명령어를 입력하면 운영체제가 알아들을 수 있는 말로 해석하여 수행해준다.

     

    명령어들이 구현되는 방법

    - 명령 인터프리터에 명령을 실행할 코드가 들어있는 방식

    - 명령 인터프리터는 명령에 대해 전혀 모르고 시스템 프로그램에 의해 명령을 구현하는 방식

     

    컴퓨터를 관리하는 시스템 관리자, 시스템에 대해 깊게 알고있는 파워 유저가 사용한다.

    - 하고 싶은 작업에 빨리 접근할 수 있다는 장점이 있어서 사용한다.

    - GUI, TSI 에서는 시스템 기능의 일부만 사용할 수 있다.


    2. 그래픽 기반 인터페이스(GUI)

     

    이 방식은 명령 인터프리트에 사용자가 명령을 직접 입력하는 것이 아니라 데스크톱이라는 마우스를 기반으로 하는 윈도 메뉴 시스템을 사용한다. 이건 우리가 평소에 쓰는 방식이다.


    3. 터치 스크린 인터페이스(TSI)

     

    스마트폰, 태블릿에서 사용한다.


     

     

     

    3. 시스템 콜


    시스템 콜운영체제에 의해 사용 가능하게 된 서비스에 대한 인터페이스를 제공한다.


    1. 시스템 콜 예시

    컴퓨터 구조론이나 시스템 프로그래밍 수업에서 MIPS 프로그래밍을 했던 명령어들이 모두 시스템 콜이라고 생각하면 된다. 그래서 간단한 작업을 하는 것만 해도 많은 시스템 콜을 호출하게 된다. 위의 사진은 어떤 파일을 다른 파일로 복사하는 과정에서 나오는 시스템 콜이다.


    2. 응용 프로그래밍 인터페이스(API)

     

    대부분의 사용자들은 초당 수천개의 시스템 콜을 호출한다는 것을 모른다. 개발자들은 API를 사용하여 프로그램을 설계하는데, API는 함수처럼 매개변수와 반환 값을 포함하여 개발자가 사용 가능한 함수의 집합을 명시한다.

    모든 운영체제는 고유의 시스템 콜 이름을 가지며, 개발자는 운영체제가 제공하는 코드 라이브러리를 통하여 API를 활용한다. API는 개발자를 대신하여 실제 시스템 콜을 호출하는데, 굳이 이런 방법을 사용하는 이유는 프로그램 호환성 이유도 있고, 실행시간 환경(RTE)에 의해 관리될 수 있기 때문이다.

     

    운영체제에 매개변수를 전달하기 위한 방법

    - 매개변수를 레지스터 내에 전달

    - 매개변수가 레지스터보다 더 많으면 메모리 내의 블록/테이블에 저장되고, 블록 주소가 레지스터 내 매개변수로 전달

    - 매개변수의 개수가 5개 이하면 레지스터가 사용되고, 5개가 넘으면 블록방법이 사용된다


    3. 시스템 콜의 유형

     

    시스템 콜의 유형은 프로세스 제어, 파일 조작, 장치 조작, 정보 유지 보수, 통신과 보호로 나눌 수 있다.


    1) 프로세스 제어

     

    - 프로그램 종료(end), 중지(abort)

    실행중인 프로그램은 정상적으로 종료되거나(end()), 비정상적으로 중지되거나(abort()) 어떻게든 중지될 수 있어야 한다.

     

    - 프로세스가 다른 프로그램을 적재(load), 실행(execute)

    한 프로그램을 실행하고 있는 프로세스가 다른 프로그램을 적재/실행을 할 수도 있다.

    Q) 적재된 프로그램이 종료되었을 때 어디로 제어를 되돌려 주는가?

    A1) 만약 새로운 프로그램이 종료되었을 때 제어가 기존 프로그램으로 되돌아간다면, 반드시 기존 프로그램의 메모리 이미지를 보관해야 한다. 이것은 프로그램이 다른 프로그램을 호출하는 기법을 만든 것과 같다.

    A2) 만약 두 프로그램이 병행하게 수행된다면, 다중 프로그래밍 될 새로운 프로세스를 생성해야 한 것이다.

     

    - 프로세스를 생성(create_process), 종료(terminate_process), 속성 획득(get_process_attributes), 속성 설정(set_process_attributes)

    새로운 잡 / 프로세스 / 이것들의 집합을 생성한다면 실행을 제어해야 한다. 그리고 더 이상 필요가 없어지거나 새로 생성한 것이 잘못되었으면 종료도 할 수 있다. 이때 실행을 제어하는 것은 잡 / 프로세스의 속성(attribute)을 결정하고 재설정하는 것이다.

     

    - 시간 기다림(wait_time), 이벤트 기다림(wait_event), 이벤트 알림(signal_event)

    새로운 프로세스를 생성한 후, 실행이 끝날 때 혹은 이벤트가 일어날 때까지 기다리는 경우가 생기는데 이때 일정 시간만큼 기다리는 명령을 사용하거나, 이벤트가 일어날 때까지 기다리는 기능을 사용할 수 있다.

    이벤트가 일어날 때까지 기다리는 경우에는 이벤트가 일어날 때 신호를 보내야하니 알림 기능도 사용할 수 있다.

    * Linux에서는 자식 프로세스를 생성하면 fork()를 사용하고, 자식 프로세스가 종료될 때까지 기다리는 것은 fork()를 사용한다.

     

    - 메모리 할당 및 자유화

    여러 프로세스가 데이터를 공유하는 경우도 있는데, 공유되는 데이터의 일관성을 보장하기 위해 운영체제는 프로세스가 공유 데이터를 잠글 수 있는 시스템 콜을 제공한다.(acquire_lock, release_lock)


    2) 파일 관리

     

    파일 뿐만 아니라 파일들을 조직하기 위한 디렉토리에도 아래와 같은 연산 집합이 있다.

     

    - 파일 생성(create) 및 삭제(delete)

    이 시스템 콜은 파일 이름이나 파일 속성의 일부를 요구한다.

     

    - 파일 열기(create), 파일 닫기(close)

    파일을 열고 닫을 수 있어야 한다.

     

    - 파일 읽기(read), 파일 쓰기(write), 위치 변경(reposition)

    파일을 열었으면 읽고, 쓰는 것이 가능해야 하며 파일의 시작이나 끝으로 건너뛰기가 가능해야 한다.

     

    - 파일 속성 획득(get_file_attribute) 및 설정(set_file_attribute)

    파일의 여러 속성 값을 결정할 수 있어야 하고, 필요하면 재설정을 할 수도 있어야 한다.


    3) 장치 관리

     

    파일 관리와 장치 관리는 유사성이 많아서 많은 운영체제가 파일-장치 구조로 결합하여 둘을 통합하였다. 이러면 같은 시스템 콜로 파일과 장치를 조작할 수 있게 된다.

     

    - 장치 요구(request), 장치 방출(release)

     

    - 장치 읽기(read), 쓰기(write), 위치 변경(reposition)

     

    - 장치 속성 획득 및 설정

     

    - 장치 논리적 부착(attach) 및 분리(detach)


    4) 정보 유지 관리

     

    시스템 콜 목적의 종류

    - 사용자 프로그램과 운영체제 간의 정보 전달

    - 시스템에 관한 정보 전달

    - 디버깅에 도움(시스템이 메모리를 덤프하기 위한 시스템 콜)

     

    많은 운영체제는 프로그램이 특정 위치/집합에서 수행된 시간의 양인 프로그램의 시간 프로파일을 제공한다. 그리고 현재 운영되고 있는 모든 프로세스에 관한 정보를 가지고 있으며 이런 정보에 접근하기 위한 시스템 콜이 있다.


    5) 통신

     

    통신 모델은 메시지 전달 모델과 공유 메모리 모델이 존재한다.

     

    메시지 전달 모델은 통신하는 두 프로세스가 정보를 교환하기 위하여 서로 메시지를 주고 받는다. 이때 통신이 이루어지기 전에 연결이 반드시 열려야 하며, 상대 통신자의 이름을 알고 있어야 한다.

     

    공유 메모리 모델은 프로세스는 다른 프로세스가 소유한 메모리 영역에 대한 접근을 위해 시스템 콜을 사용한다.

    정상적인 운영체제는 한 프로세스가 다른 프로세스의 메모리에 접근하는 것을 막아서, 공유 메모리는 이런 제한을 없애는데 동의가 필요하다. 프로세스는 또한 동일한 위치에 동시에 쓰지 않도록 보장할 책임을 진다.

     

    메시지 전달 모델은 피해야 할 충돌이 없기 때문에 소량의 데이터를 교환할 때 유용하고, 공유 메모리 모델보다 구현이 쉽다.

    공유 메모리 모델은 컴퓨터 안에서는 메모리 전송 속도로 수행할 수 있으므로 최대 속도와 편리한 통신을 허용하지만, 보호와 동기화에서 문제가 있다.


    6) 보호

     

    컴퓨터 시스템이 제공하는 자원에 대한 접근을 제어하기 위한 기법을 제공한다.

    보호에 대한 시스템 콜은 파일/디스크와 같은 자원의 허가 권한을 설정하거나, 특정 사용자가 지정된 자원에 대한 접근을 허가/불허를 명시하는데 사용한다.


     

     

     

    4. 시스템 서비스


    시스템 서비스시스템 유틸리티로도 알려진 프로그램 개발과 실행을 위해 더 편리한 환경을 제공한다.

     

    시스템 서비스 종류

    - 파일 관리

    - 상태 정보

    - 파일 변경

    - 프로그래밍언어지원

    - 프로그램 적재와 수행

    - 통신

    - 백그라운드 서비스

     

    사용자 대부분이 보는 운영체제의 관점은 실제의 시스템 콜에 의해서보다는 시스템 프로그램과 응용에 의해 정의된다.(Windows나 macOS에서 GUI나 UNIX 쉘을 통해 어떤 일을 동작하게 만든다면 모두 동일한 시스템 콜을 사용하지만, 호출은 다르게 보이고 다른 방법으로 동작한다.)


     

     

     

    5. 링커와 로더


    일반적으로 프로그램은 디스크에 이진 실행 파일로 존재한다. 그래서 CPU에서 실행하려면 프로그램을 메모리로 가져와 프로세스 형태로 배치되어야 한다.

    이 파트에서는 프로그램을 컴파일하여 메모리에 배치하고, CPU에 실행하기까지의 절차를 단계별로 설명한다.

     

    1. 소스 파일을 메모리에 적재되도록 설계된 오브젝트 파일로 컴파일 된다

    (이 파일 형식을 재배치 가능 오브젝트 파일이라고 부른다.)

    2. 링커는 이런 재배치 가능 오브젝트 파일을 하나의 이진 실행 파일로 결합한다.

    3. 로더이진 실행 파일을 메모리에 적재하는데 사용되며, CPU 코어에서 실행할 수 있는 상태가 된다.

     

    * 링크와 로드와 관련된 활동을 재배치라고 부른다. 이 활동은 프로그램 부분에 최종 주소를 할당하여 내부 코드와 데이터를 해당 주소와 일치하도록 조정하고, 프로그램이 실행될 때 코드가 라이브러리 함수를 호출하고 변수에 접근할 수 있게 한다.

    * 오브젝트 파일과 실행 파일은 표준화된 형식을 가진다.


     

    반응형

    '공부 > 운영체제(OS)' 카테고리의 다른 글

    [공룡책] Ch.6 동기화 도구  (0) 2022.04.27
    [공룡책] Ch 5. CPU 스케줄링  (0) 2022.04.27
    [공룡책] Ch 4. 스레드와 병행성  (0) 2022.04.26
    [공룡책] Ch 3. 프로세스  (0) 2022.04.26
    [공룡책] Ch 1. 서론  (0) 2022.04.12

    댓글

Designed by Tistory.