2. Operating System Structure

박수빈·2022년 1월 11일
0

  • 관점
    1. os가 제공하는 서비스에 초점
    2. 사용자와 프로그래머에게 제공하는 인터페이스에 초점
    3. 시스템의 구성요소와 상호 연결에 초점

2.1 OS Services

사용자에게 도움을 주기위한

  • User Interface
    • GUI
    • touch screen
    • CLI
  • program execution 프로그램 수행
    • 프로그램을 mem에 적재 → 실행
    • 정상/비정상 종료
  • I/O operation 입출력 연산
    • 입출력 장치
  • file sys. manipulation 파일 시스템 조작
    • 파일 생성, 삭제, 읽기, 쓰기, 찾고 정보 열거
    • 권한 관리
    • 디렉터리
  • communication 통신
    • 프로세스 사이에서
    • 네트워크 상의 다른 컴퓨터의 프로세스
    • 구현
      • 공유 메모리
      • 메세지 전달 msg. passing (패킷)
  • error detection 오류 탐지
    • 오류마다 적절한 조치
    • 디버깅 설비

시스템의 효율적 작동을 위한

  • 자원할당 resource allocation
    • cpu 스케쥴링
    • 멀티 프로세싱 → 자원 할당 중요
  • 기록 작성 logging
    • 어떤 프로그램이 어떤 종류 자원 얼마나 사용하는지
  • 보호 protection, 보안 security
    • 한 프로세스가 다른 프로세스 방해X

2.2 User and OS interface

2.2.1 Command interpreter

  • 사용자가 처음 로그인 할 때
  • shell
    • 명령 인터프리터 해석기
    • 우리가 친거를 시스템콜로 번역하는 해석기 약간 컴파일러 느낌~!
  • 사용자가 지정한 명령 가져와서 실행
  • 방식
    1. 커맨드 인터프리터가 직접 실행 코드를 가지는 경우
      1. 인터프리터가 직접 시스템 콜 호출
    2. sys. prog.에 의해 명령을 구현
        rm file.txt 
	1. rm 이라는 파일 찾기 → 메모리 적재 → 매개변수 file.txt 로 수행
	2. rm 이라는 파일 내의 코드를 이용
    

2.2.2 Graphical UI

2.2.3 Touch screen interface

  • 제스처
  • Springboard 터치스크린 인터페이스

2.2.4 Choice of Interface

  • shell scripts
    • cli 기반
    • 자주 이용되는 작업 파일에 작성해서 반복 실행

2.3 Sys. calls

  • os에 의해 사용가능하게 된 서비스에 대한 인터페이스 제공

2.3.2 App. programming interface

  • API - application programming Interface
    • api에 따라 프로그램 설계
    • 매개변수, 반환값 → 프로그래머가 사용 가능한 함수의 집합 명시
    • Windows API, POSIX API, Java API
      • POSIX → unix, linux, mac os
    • 개발자 대신 api가 실제 시스템 콜 호출
  • RTE 실행시간 환경 Run Time Env.
    • SW + library + loader
    • sys. call interface 제공
      • 시스템 콜 테이블
      • 상태와 리턴 값
  • os 인터페이스는 API에 의해 숨겨지고, RTE에 의해 관리됨
  • os에 매개변수 전달
    1. 레지스터 내에 전달
      • 레지스터보다 매개변수가 많으면? → mem내의 블록에 parm 저장하고, 그 주소를 reg에
    2. stack
      • 갯수, 길이 제한 X

2.3.3 types of Sys. calls

2.3.3.1 프로세스 제어 process control

  • end, abort
  • load, execute
  • create, finish
  • attribtes 획득, 설정
  • 시간 기다림
  • event wait, signal event
  • 메모리 할당 및 자유화

2.3.3.2 파일 조작 file manipulation

  • create file, delete file
  • open, close
  • read, write, reposition
  • 파일 속성 획득 및 설정
  • 디렉터리

2.3.3.3 장치 조작 device mgt

  • request devices, release devices
  • read, write ,reposition
  • 장치 속성 획득, 설정
  • 논리적 attach, detach

2.3.3.4 정보 유지 보수 information maintenance

  • 시간, 날짜 설정&획득
  • 시스템 데이터의 설정, 획득
  • 프로세스, 파일, 장치 속성 획득&설정
  • timeprofile
    • 프로그램이 사용한 시간의 양
    • tracing facility 추적 설비, 정규 타이머 인터럽트 필요

2.3.3.5 통신 comm.

  • 통신 연결 생성, 제거
  • 메세지 송신, 수신
  • 상태 정보 전달
  • 원격 장치 attach, detach
  1. 공유 메모리
    • 다른 프로세스가 소유한 메모리 영역에 접근
    • 메모리 접근 제한을 해제하는 것에 상호 동의 필요
    • 동일한 위치에 동시에 write 하지 않음 보장
  2. 메세지 전달 모델
    • 통신 전에 반드시 open
    • 프로세스 “이름”을 알아야
    • 호스트 이름, 프로세스 이름 → 식별자
    • 소량의 데이터 교환

2.3.3.6 보호 protection

  • get, set file permissions

2.4 system services

  • = system utility
  • prog 개발과 실행을 위해 더 편리한 환경 제공
  1. 파일 관리
  2. 상태 정보
    • 날짜, 시간, 사용가능한 메모리, 디스크, 사용자 수 ...
    • 성능, 로깅 및 디버깅 정보
  3. 파일 변경
    • text editor
    • 검색, 변환 ...
  4. 프로그래밍 언어 지원
    • 컴파일러, 어셈블러, 디버거, 인터프리터
  5. 프로그램 적재와 수행
    • 메모리 적재
    • absolute loader, relocatable loader, linkage editor, overlay loader...
    • 디버깅시스템
  6. 통신
    • 메세지, 웹서핑, 이메일 ,로그인, 파일 전송 ...
  7. 백그라운드 서비스
    • = 서비스, 서브 시스템, daemon
    • 프로세스 스케쥴러, 시스템 오류감시 서비스, 출력 서버

2.5 linkers and loader

  • 프로그램: 디스크에 binary 파일 → 메모리에 프로세스로
  • 재배치 가능한 오브젝트 파일 relocatable obj. file
    • 소스 파일 → 컴파일 → 오브젝트 파일
    • 임의의 물리적 메모리에 적재
    • 표준 c 라이브러리, 수학 라이브러리...
  • obj. file 들 → 링커 → 하나의 binary 실행 파일
  • 로더
    • binary 실행 파일 → 로더 → 메모리에 적재

  • 동적 링크
    • DLL Dynamic Linked Library
    • 오브젝트 파일 링크를 run time에 메모리에 적재
    • 메모리 절약
  • ELF Executable and Linkable Format
    • 오브젝트 파일, 실행 파일 표준 형식

2.6 Why app. are OS specific

  • OS 마다 고유한 시스템콜이 다르다
  • 범 OS prog 사용법
    1. 인터프리터 언어 → 각 운영체제에 맞게 실행타임에 번역
    2. 가상머신 → RTE의 일부인 가상머신
    3. os 고유의 이진파일 생성하는 api 사용 → 이식
  • 크로스 플랫폼 어려움
  • ABI: Applicaiton Binary Interface
    • 이진 코드의 구성요소가 특정 os 와 상호작용 할 수 있는 방법 정의
    • 주소 길이, 시스템 콜 매개변수 전달 법, 런타임 스택 구성 ...
    • 아키텍처 수준의 API → CPU 별로

2.7 OS Design and Implmentation

2.7.1 Design Goals

  1. 시스템의 목표와 명세 정의

2.7.2 Mechanisms and Policies

  • 기법 mechanisms으로 부터 정책 policy를 분리
  • mechaninsms = how
  • policy = what
    • 상황에 따른 융통성을 지님
  • cpu 스케쥴링 문제
    • 어떻게 할당하지? → 메커니즘
    • 무엇을 할당하지? → 정책

2.7.3 Implementation

  • 어셈블리
  • 최근엔 c, c++
  • 고급프로그래밍 언어로 운체 개발 → 다른 하드웨어로 이식 쉬워짐
  • 좋은 자룍조, 알고리즘 → 운체 발전

2.8 OS Structures

2.8.1 Monolithic Structure

  • 커널의 모든 기능을 단일 주소 공간에서 실행되는 단일 정적 이진 파일에 넣는 것
  • UNIX
    • 커널 + sys. prog.
      - 커널 = 인터페이스 + 장치 드라이브

    • 이 모든걸 하나의 주소에 두기엔 너무 큼
  • Linux
    • 단일 주소 공간에서 커널 모드로 전부 실행 → monolithic
    • but, 런타임 중에 커널 수정 가능 → module식
  • 성능 뛰어남
    • 오버헤드 X
    • 커널 내 통신 속도 빠름

2.8.2 Layered Approach

  • 느슨하게 결합된 sys
  • 모듈 방식
  • 한 모듈의 수정이 다른 모듈에 영향 X
  • 계층적 접근 방식
    • 구현과 디버깅 간단
    • 첫 번째 층이 완벽하다 → 다음 층 구현
    • TCP/IP에 사용
    • 오버헤드 커서 os에는 사용 어려움. 층을 명확히 정의하기도 어려움

2.8.3 Michrokernels

  • 중요하지 않은 구성요소 커널에서 제거 → 별도의 주소 공간
  • 분리된 기능간의 통신 → 메시지 이용
  • HW 간 이식이 쉽고, 보안성과 신뢰성 높음

  • 오버헤드 큼
  • MacOs에 사용. 초기 윈도우 발목잡은 주 원인

2.8.4 Modules

  • Loadable Kernel Mouldes, LKM 적재가능 커널 모듈
    • 커널이 핵심 갖고있고, 부가적 서비스는 모듈통해 링크
    • 서비스 동적 구현
    • 모듈이 다른 모듈 호출 가능 → 계층구조보다 유연

2.8.5 Hybrid Sys.

  1. macOS , iOS
  2. Android

2.9 Building and Booting an OS

2.9.1 OS Generation

  • 시스템의 크기, 일반성, 하드웨어 구성 변경의 난이도

2.9.2 Sys. Boot

  • 부팅: 커널을 적재하여 컴퓨터를 시작하는 과정
    1. 부트스트랩 프로그램/부트로더 라는 작은 코드가 커널 위치 찾음
    2. 커널이 메모리에 적재되고 시작됨
    3. 커널이 하드웨어 초기화
    4. 루트 파일 시스템이 마운트
  • 부트 로더
    • BIOS (비휘발성 펌웨어)에 위치
      • 부트 블록 적재하는 작업 함
        • 부트 블록: 전체 os 메모리에 적재
        • 분리 해둔 것
    • UEFI: Unified Extensible Firmware Interface
      • 한 곳에 부트로더 저장
      • 빠르다
  • 메모리 적재 + 시스템 상태 확인(점검)

2.10 OS Debugging

  • HW, SW에서 sys 오류 발견하고 수정하는 행위
  • 성능 조정 performance tuning도 디버깅에 포함 (병목현상 제거)

2.10.1 Failure Analysis

  • log file: 사용자에게 문제 발생했다는 오류 기록
  • core dump: 프로세스가 사용하던 메모리 캡처
  • crash: 커널 장애
    • crash dump: 커널이 사용한 메모리 캡처

2.10.2 Performance Monitoring and Tuning

  1. Counter
    • 시스템콜 횟수, 장치에 수행된 작업 수 등 추적
  2. Tracing 추적
    • 특정 이벤트에 대한 데이터 수집

2.10.4 BCC

  • 디버깅 환경 제공
  • 안정성 해치지 않고 디버깅 해야함
  • BPF Compiler Collection → eBPF의 프론트엔드 인터페이스
  • Linux 시스템을 위한 추적 기능 제공하는 툴 킷
  • eBPF: extended Berkeley Packey Filter
    • 트래픽 필터링
    • 특정 이벤트 캡처
    • 시스템 성능 관찰
profile
개발자가 되고 싶은 학부생의 꼼지락 기록

0개의 댓글