Operating System Ch 2 : System Structures

이정빈·2023년 12월 25일
0

OS

목록 보기
2/15

2.1 Operating System Services

운영체제는 프로그램 실행환경을 제공하고 프로그램과 사용자에게 특정 서비스를 제공한다.

사진과 같은 서비스는 프로그래머가 프로그래밍을 좀 더 쉽게 해줌

  1. 사용자 인터페이스 (UI)
  • 그래픽 사용자 인터페이스 (GUI) : 가장 일반적이고, 그래픽적으로 인터페이스를 나타냄
  • 명령어 라인 인터페이스 (CLI) : 명령을 사용, 키보드로 입력하는 것
  1. 프로그램 수행
  • 시스템은 프로그램을 메모리에 적재해 실행해야한다. 또한, 실행을 끝낼 수 있어야함
  1. 입출력 연산 (I/O)
  • 수행 중인 프로그램이 입출력을 요구할 때
  • 사용자들이 입출력장치를 직접 제어할 수 없기 때문에, 운영체제가 입출력 수행의 수단을 제공해야함
  1. 파일 시스템 조작
  • 프로그램은 파일을 읽고 쓰고 만들고 삭제할 수 있어야 한다.
  • 접근 허가, 거부도 할 수 있어야함
  1. 통신
  • 프로세스끼리 정보를 교환해야함
  • 동일한 컴퓨터끼리, 다른 컴퓨터끼리도 가능해야함
  1. 오류 탐지
  • 모든 가능한 오류를 항상 의식해야함
  1. 자원 할당
  • 멀티적으로 동시에 실행될 때, 경쟁이 일어나지 않게 관리해줘야함
  1. 기록 작성
  • 컴퓨터 자원이 얼마나 많이 사용하는지 알 수 있어야 한다.
  1. 보호와 보안
  • 여러 프로세스가 병행하게 수행될 때, 서로 방해되서는 안 된다.
  • 외부로부터 보호도 해야함

2.2 User and OS Interface

사용자가 운영체제와 접촉하는 방식에는 3가지가 있음

2.2.1 Command Interpreter


선택할 수 있는 여러 명령 인터프리터를 제공하는 시스템에서 이 해석기는 셸이라고 부름

사용자가 지정한 명령을 가져와서 그것을 수행하는 것
생성, 삭제, 리스트, 복사 등 수행함

2.2.2 GUI

데스크톱이나 아이콘 폴더 등을 통해서 파일에 접근하는 것, 가장 익숙한 것

또는 터치스크린 등

2.3 System Calls

시스템 콜은 운영체제에 의해 사용 가능하게 된 서비스에 대한 인터페이스를 제공한다.
간단한 프로그램(파일 복사, 이동)의 경우도 많은 시스템 콜을 수행함

한 파일에서 다른 파일로 복사하는 것인데, 다양한 시스템 콜이 많이 발생한다.

C에서 코드를 작성하고, 복사하고 컴파일하다보면 밑단에서 다양한 시스템 콜이 발생해서 내가 원하는대로 수행함

2.3.2 Application Programming Interface

대부분 프로그래머들은 시스템 콜이 어떻게 구현되고 어떤 작업을 하는지 알 필요 없음. 그냥 OS가 무엇을 하는지만 이해하자

운영체제 인터페이스에 대한 대부분의 자세한 내용은 API에 의해 숨겨지고, PTE (실행시간 환경)에 의해 관리됨

API에서 시스템 콜 함수를 사용했으면 인터페이스가 이를 인식해서 시스템 콜 함수를 리턴한 후 다시 인터페이스가 API에게 전달하는 것임


시스템 콜 함수의 인덱스가 있어서 테이블로 가서 해당 인덱스의 함수 사용

이때, 운영체제에 매개변수(인덱스)를 전달하는 방법 3가지가 있음
1. 매개변수를 레지스터 내에 전달
2. 레지스터보다 많으면, 매개변수는 블록이나 테이블에 저장, 블록의 주소가 매개변수
3. 매개변수를 블록이나 스택에 저장하는 법 (길이에 제한이 없다)

2.3.3 Types of System Calls


다양한 시스템 콜 함수들이 있는데, 무작정 외우기 보다는 쓰면서 필요할때마다 공부하는 것이 나아보임

  1. 프로세스 제어
  • 프로세스 생성
  • 프로세스 reset
  • 프로세스 종료
  • 프로세스 wait
  • 프로세스 특정 이벤트까지 wait
  • 신호를 보내는 것
  • 공유데이터 잠그기
  1. 파일관리
  • 파일 생성
  • 파일 삭제
  • 파일 열기
  • 파일 읽기
  • 파일 쓰기
  • 파일 위치 변경
  • 파일 되감기
  • 닫기
  • 파일 속성 획득
  • 파일 속성 설정
  1. 장치관리
  • 장치 요청
  • 징치 방출
  • 장치 읽기,쓰기, 위치 변경
  1. 정보유지 관리
  • 현재 시간, 날짜
  • 메모리 덤프
  • 시간 프로파일
  • 운영중인 모든 프로세스에 관한 정보
  1. 통신
  • 메시지 전달 모델 : 통신하는 두 프로세스가 정보를 교환하기 위해 서로 메시지를 주고받는다. 메시지는 두 프로세스 사이에서 교환, 간접적으로 교환
  • 공유 메모리 : 원래 프로세스끼리 메모리 접근이 안되지만, 메모리 영역에 대한 접근을 하기 위한 것

메시지 전달모델은 소량의 데이터, 후자는 동기화 부분을 조심해야함

  1. 보호
  • 파일 허가 권한 설정
  • 접근이 허가 되었는지 불허가인지 명시

2.4 System Services

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

  1. 파일관리
  • 파일과 디렉터리 생성, 삭제, 복사 등
  1. 상태 정보
  • 시스템에게 날짜, 시간, 메모리 등
  1. 파일 변경
  • 파일의 내용을 생성하고 변경할때
  1. 프로그래밍 언어 지원
  2. 프로그램 적재와 수행
  • 프로그램이 수행하려면 메모리에 적재되어야 한다. loader 들을 제공함
  1. 통신
  2. 백그라운드 서비스

2.5 Linkers and Loaders

링커는 재배치 가능한 obj 파일을 하나로 결합
로더는 파일을메모리에 적재

2.6 Why Applications are OS Specific

시스템 콜은 어느정도 같더라도 다른 장벽으로 인해 응용 프로그램을 다른 OS 실행하기 어렵다.
하지만 동일한 프로그램을 다른 OS에서 사용 가능함
방법이 3가지 있는데, 단점도 많고 잘 안됨. 할 일도 없을 거 같으니 생략

OS끼리 호환이 안되는 가장 큰 이유는 실행 파일 내의 특정 위치가 OS마다 다르기 때문. 시스템 콜 번호, 의미 등등 이런것도 달라서 호환이 안됨

2.7 Operating System Design and Implementation

  1. 설계 목표
  • 요구 조건은 근본적으로 사용자 목적과 시스템 목적으로 나뉨
  • 사용자 입장에서는 사용하기 쉽고, 좋고, 안전하고 빨라야함
  • 시스템적 입장에서, 구현, 유지보수가 쉬워야한다.
  1. 기법과 정책
  • 어떻게 할 것인가를 결정
  • 무엇을 할지 결정
  1. 구현
  • OS는 고급언어로 작성, 이전에는 어셈블리어
  • 속도가 느리고, 저장 장치가 많이 소요

2.8 Operating System Structures

일반적인 방법은 1개의 일관된 시스템보단 태스크를 작은 구성요소로 분할하는 것
분할한 모듈은 신중히 정의된 부분 (함수 느낌)

2.8.1 Monolithic Structure


모놀리식 구조 : 구조가 아예 없는 것. 커널의 모든 기능을 단일 주소 공간에서 실행되는 단일 정적 이진 파일에 넣는 것

구현 및 확장이 어렵지만, 시스템 콜 인터페이스에서 오버헤드가 거의 없고, 커널 안의 통신 속도가 빠름
따라서 여전히 많이 쓰임

2.8.2 Layered Approach

모놀리식 접근법은 시스템의 한 부분을 변경하면 다른 부분에 크게 영향이 가므로, 느슨하게 결합된 시스템을 생각해보자

특정 기능 및 한정된 기능을 가진 개별적이며 작은 구성요소로 나뉘고 이것들이 합쳐져서 커널을 만든다.
생성, 변경이 자유로워짐!

모듈화 되는 방식은 다양하다


계층적 접근 방식

이 방식은 운영체제가 여러 층으로 나뉘어진다.
밑으로 갈수록 하드웨어, 위로 갈수록 인터페이스이다.

오류가 나면 어느 층에서 오류가 났는지 알기 쉬워서 디버깅이 쉬워진다.
하지만 여러 계층을 통과해야하므로 오버헤드가 자주 일어난다.

2.8.3 Micro kernels


모든 중요치 않은 구성요소를 커널로부터 제거하고, 제거한 것들을 별도의 주소 공간에 좋재하는 사용자 수준 프로그램으로 구현하는 것
(어느 것이 불필요한지는 애매)

주 기능은 다양한 서비스 간에 통신을 제공하는 것
또한, 운영체제의 확장이 용이하다. 커널을 변경할 필요 없다.

대신 가중된 시스템 기능 오버헤드 때문에 성능이 나빠진다.

2.8.4 Modules

최근 기술 중 가장 최선책인 적재가능 커널 모듈 기법이다.
커널은 핵심적인 구성요소의 집합을 가지고 있고 부팅 때 또는 실행 중에 부가적인 서비스들을 모듈을 통하여 링크할 수 있다.

설계의 핵심은 커널은 핵심 서비스를 제공하고 다른 서비스들은 커널이 실행되는 동안 동적으로 구현하는 것

동적으로 구현하면 수정사항이 생길때마다 커널을 다시 컴파일할 필요가 없다.

2.8.5 Hybrid Systems

다양한 구조를 결합하여 성능, 보안 및 편리성 문제를 해결하려는 혼용구조로 구성

새로운 기능을 동적으로 추가할 수 있는 module을 사용한다.
또는 동적으로 적재 간으한 커널 모듈도 지원함

2.10 OS Debugging

주 성능 문제인 병목현상을 제거해야함

2.10.1 Failure Analysis

문제가 발생한 오류정보를 로그 파일에 기록한다.
운영체제는 프로세스가 사용하던 메모리를 캡쳐한 코어 덤프를 취하고 차후 분석을 위해 파일로 저장한다.

커널 장애는 크래시 crash라고 불림, 크래쉬 덤프가 저장됨

2.10.2 성능 관찰 및 조정

운영체제는 카운터를 통해 호출된 시스템 콜 횟수, 디스크에 수행된 작업 수와 같은 시스템 활동을 기록함

윈도우에서는 작업관리자가 대표적

BCC는 리눅스를 위한 추적기능을 제공하는 도구

0개의 댓글