학교/운영체제

[운영체제] 2. 운영체제 구조

daykim 2023. 1. 9. 17:05
도서 기반 내용 정리
 

운영체제 | Abraham Silberschatz - 교보문고

운영체제 | ▶ 이 책은 운영체제론을 다룬 이론서입니다. 운영체제론의 기초적이고 전반적인 내용을 학습할 수 있습니다.

product.kyobobook.co.kr

 

목차

  • 운영체제 서비스
  • 시스템 콜
  • 링커와 로더
  • 응용 프로그램이 운영체제마다 다른 이유
  • 운영체제 디버깅

 

운영체제 서비스


운영체제는 프로그램과 사용자에게 특정 서비스를 제공한다.

아래 서비스는 프로그래머가 프로그래밍 작어블 더 쉽게 수행할 수 있도록 해준다.

사용자 인터페이스 (User Interface)

  • 사용자와 컴퓨터 시스템이 만나는 지점
    키보드 타이핑이나 마우스 클릭과 같은 행동으로 사용자는 컴퓨터를 조작할 수 있다.
  • GUI (Graphical user interface)
  • CLI (command-line interface)
  • 터치 스크린 인터페이스

프로그램 실행 (program execution)

  • 시스템은 프로그램을 메모리에 적재하고 실행할 수 있어야 한다.
  • 프로그램이 정상이든 비정상이든 실행을 끝낼 수 있어야 한다.

입출력 연산 (I/O operation)

  • 수행중인 프로그램은 입출력을 요구할 수 있다.
  • 효율과 보호를 위해, 사용자들이 직접 제어할 수 없고, 운영체제가 입출력 수단을 제공해야 한다.

파일 시스템 조작 (File system manipulation)

  • 파일을 읽고, 쓰고, 만들고, 지운다.
  • 권한에 따라 파일이나 디렉터리 접근을 허가하거나 거부할 수 있다.

통신 (Communications)

  • 한 프로세스가 다른 프로세스와 정보를 교환해야 할 때
    공유메모리, 메시지 전달(Message passing)이란 방법을 사용한다.

오류 탐지 (Error detection)

  • 운영체제는 모든 가능한 오류를 항상 의식하고, 각 유형에 대해 적당한 조치를 해야 한다.

 

시스템 자체의 효율적인 동작을 보장하기 위한 운영체제 기능들도 존재한다.

자원 할당 (Resource Allocation)

  • 다수의 프로세스나 다수의 작업이 동시 실행시 각각에 자원을 할당해줘야 한다.
  • 운영체제는 여러가지 다른 종류의 자원을 관리한다.

기록 작성 (Logging)

  • 어떤 프로그램이 어떤 종류의 자원을 얼마나 많이 사용하는지 추적할 수 있어야 한다.
  • 사용 통계를 내기 위해 사용된다.
  • 컴퓨팅 서비스를 개선하기 위해 귀중한 자료가 될 수 있다.

 

시스템 콜 (System Calls)


사용자 프로세스가 운영체제로부터 직접 제공받아야 하는 특정 서비스를 해달라고 요청하는 것

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

  • 일종의 운영체제의 API라고 생각해라

예제

cp in.txt out.txt
  • 위 명령어는 입력 파일을 오픈하고, 출력 파일을 생성 후 오픈한다.
  • 사용자 프로그램이 디스크에 있는 파일을 연다는 것은 파일 시스템에 접근한다는 의미
  • 시스템에 접근하기 위해선 커널 모드로 전환 되어야 한다.
  • 이때 시스템 콜을 사용

시스템콜이 사용되는 방법의 예

 

응용 프로그래밍 인터페이스 (Application Programming Interface, API)

API는 각 함수에 전달되어야 할 매개변수들과 프로그래머가 기대할 수 있는 반환 값을 포함해 응용 프로그래머가 사용 가능한 함수의 집합을 명시한다.

프로그래머는 운영체제가 제공하는 코드의 라이브러리를 통해 API를 활용한다.

open() 시스템 콜 호출하는 사용자 응용 프로그램의 처리

 

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

  1. Call by value : 매개 변수 값 자체를 복사해 CPU 레지스터에 전달
  2. Call by reference : 값의 메모리 주소를 전달
    레지스터 개수보다 더 많은 값을 전달할 때 효율적
  3. 프로그램을 통해 스택(Stack)에 매개변수를 추가하고, 운영체제를 통해 값을 뺀다.

시스템 콜의 유형

  • 프로세스 제어 : end, abort, load 등
  • 파일 조작 : create, delete, open, close 등
  • 장치 관리 : read, write 등
  • 정보 유지 보수
  • 통신
  • 보호

 

표준 C 라이브러리

UNIX 및 Linux 시스템을 위한 시스템 콜 인터페이스를 제공한다.

C라이브러리는 printf() 호출을 가로채고 운영체제의 필요한 시스템 콜을 부른다.
아래 예에선 write()가 시스템 콜

 

링커와 로더 (Linkers and Loaders)


링커

재배치 가능한 오브젝트 파일을 하나의 실행 파일로 결합한다.

로더

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

프로그램을 컴파일하고 메모리에 배치하여 사용 가능한 CPU 코어에서 실행할 수 있게 되기까지 절차

  1. 소스 파일은 임의의 물리 메모리 위치에 적재되도록 설계된 오브젝트 파일로 컴파일 된다.
    이러한 형식을 재배치 가능 오브젝트 파일이라고 한다.
  2. 링커는 이러한 오브젝트 파일을 하나의 이진 실행 파일로 결합한다.
  3. 로더는 실행파일을 메모리에 적재하는데 사용되며, CPU 코어에서 실행할 수 있는 상태가 된다.

 

프로그램 실행 과정

  1. Unix 시스템에서 명령어 라인에 프로그램 이름 입력
    GUI에선 아이콘 더블 클릭
  2. fork() 시스템 콜을 사용해 프로그램을 실행하기 위한 새 프로세스 생성
  3. exec() 시스템 콜로 로더를 호출하고, exec()에 실행 파일 이름을 전달한다.
  4. 로더는 새로 생성된 프로세스의 주소 공간을 사용해 지정된 프로그램을 메모리에 적재한다.

 

동적 링킹 라이브러리 (Dynami-cally linked library, DLL)

프로그램이 적재될 때 라이브러리를 동적으로 링크

  • 실행 파일에서 사용되지 않을 수 있는 라이브러리를 링크하고, 로드하지 않아도 된다.
  • 대신 라이브러리는 조건부로 링크되고, 프로그램 실행 시간에 필요한 경우 적재된다.

 

응용 프로그램이 운영체제마다 다른 이유


운영체제는 고유한 시스템 콜 집합을 제공한다.
시스템 콜은 어느 정도 같더라도, 다른 장벽으로 인해 응용 프로그램을 다른 운영체제에서 실행하기 어렵다.

동일한 응용 프로그램을 여러 운영체제에서 실행하는 방법

  1. 응용 프로그램을 운영체제마다 인터프리터가 제공되는 인터프리터 언어로 작성한다.
  2. 응용 프로그램은 실행 중인 응용프로그램을 포함하는 가상 머신을 가진 언어로 작성될 수 있다. ex) java
  3. 응용 프로그램 개발자는 컴파일러가 기기 및 운영체제 고유의 이진 파일을 생성하는 표준 언어 또는 API를 사용할 수 있다.

 

운영체제 디버깅


디버깅

하드웨어와 소프트웨어에서 시스템의 오류를 발견하고 수정하는 행위

병목 현상

두 구성 요소의 최대 성능의 차이로 인해 한 구성 요소가 다른 하드웨어의 잠재 성능을 제한하는 것을 말합니다

 

  • 장애 분석
  • 성능 관찰 및 조정
  • 추적
  • BCC

 

Modules

모듈은 커널을 확장하기 위한 기술로, OOP에서 말하는 그 모듈화와 같은 개념이다.
프로세스에 실시간으로 모듈을 붙여 작동시키거나, 각 기능들을 독립적으로 관리할 수 있어 효과적으로 시스템을 유지할 수 있다.