728x90
OS Services/Interface

OS Services/Interface

  • OS의 기능
    • 사용자 관점
      • User Interface(UI) : CLI, GUI, 터치스크린, Batch 등
      • 프로그램 실행
      • I/O 동작 : 파일, 디바이스의 동작
      • 파일 시스템 manipulation
      • 통신 : local 혹은 외부 네트워크로의 접근
      • 에러 검출 : HDD Bad Sector 등
    • 시스템 관점
      • 자원 할당 : CPU 사이클, 메모리, 파일 등
      • Logging : 컴퓨터 자원 및 유저 활동의 추적
      • Protection / Security
  • User Interface
    • CLI ( Command Line Interface )
      • 커널 혹은 시스템 프로그램에 의해 동작
      • 보안 문제를 방지하기 위해 Linux/Unix의 경우 Command를 별도 실행 파일로 만들어 두고 shell 자체는 최소한의 기능으로 유지
    • GUI
      • 사용자의 편의 중심
      • 대개 마우스, 모니터, 키보드로 구성
      • 아이콘이 파일, 프로그램 등을 나타냄

System Call

  • 운영체제가 제공하는 일종의 인터페이스

  • 보통 C/C++로 작성되며, Win32, POSIX, JVM 등이 있음

  • System Call 실행

    • 보통 각 System Call에는 번호가 매겨져 있음
    • System Call Interface는 index table로 구성
    • 해당 값에 맞는 번호를 전달하여 system call : 시스템 상태와 정해진 값을 return
  • parameter passing

    • System Call 시 상세 동작 수행
      • ex. file open 시 어떤 파일을 열 것인가?
    • 레지스터를 통한 전달 (Table) : 가장 단순한 방법
      • CPU 레지스터 크기의 한계 존재
    • 메모리 Stack, Queue 사용 : 특정 규약에 따른 parameter passing
    • System Call 시 주소와 Call number를 전달
      • 주소는 parameter가 저장된 주소를 가리킴
      • call number는 해당 system call을 호출
  • system call의 종류

    • 프로세스 생성/삭제
    • 종료, 취소
    • 불러오기, 실행
    • 프로세스 권한 설정
    • 대기, signal event
    • 메모리 할당 및 해제
    • 메모리 오류 시 dump
    • 버그 / 명령 실행 시 디버깅
    • 공유 자원 접근 시 제한
    • 파일 관리
      • 생성, 삭제, 열고 닫기, 읽기, 쓰기, 권한 조정
    • 디바이스 관리
      • 요청, 해제, 읽기, 쓰기, 권한 조정

System Services

  • 운영체제의 기능
    • 파일 관리 - 생성, 삭제, 복사, 이름 바꾸기 등
    • 상태 정보
      • 시간, 디스크 용량, 사용자 수
      • 로깅, 디버깅 등
      • 몇몇 시스템은 레지스트리(설정 정보 저장) 실행
    • 프로그래밍 지원 - 컴파일러, 어셈블러, 디버거 등
    • 프로그램 로드 및 실행- 로더, 링커 등
    • 통신
    • 백그라운드 서비스
      • 서비스, 서브시스템, 데몬(daemon)으로 유명
      • 디스크 점검, 프로세스 스케줄링, 에러 로그 등
      • 부팅 시 동작하나 커널이 아닌 유저 레벨의 프로그램

Linkers and Loaders

  • 작성된 소스 파일은 컴파일되어 Object 파일로 할당(.o)

  • 링커(Linker)는 object 파일을 실행 가능한 파일로 생성

    • 소스 코드(.c, .py), 연관된 라이브러리 등을 연결(Link)
    • 최근 시스템의 경우 실행 파일에 라이브러리를 링크하지 않음
      • DLL(Dynamically Linked Library)
        • 과거에는 모든 프로그램에 라이브러리가 링크되어 메모리 효율이 낮음
        • DLL을 메모리에 로드하여 복수 프로그램이 같은 라이브러리에 접근 가능
        • 이때 라이브러리를 호출할 때만 DLL이 로드됨
  • 로더는 생성된 실행 파일을 메모리에 이동

    • 이 때 pointer 등 할당되는 데이터의 주소 결정
  • 소스 프로그램 >> 컴파일러 >> 오브젝트 파일 >> 링커 (+다른 오브젝트 파일) >> 실행 파일 >> 로더 (+DLL) >> 메모리 할당

Why Applications are Operating System Specific

  • 컴파일된 프로그램은 특정 OS에서만 동작
  • 각 운영체제별로 System Call을 사용하는 방식이 다름
  • 다중 OS를 지원하는 경우
    • 인터프리터 : 파이썬, 루비 등
    • Virtual Machine 내 프로그램 : 자바 등
  • OS specific한 원인 - Application Binary Interface (ABI)
    • 운영체제 별로 API 구조는 동일
    • 함수 실행, 데이터 배치 등의 세부적 구조가 다르기 때문에 OS별로 동작이 다르게 나타남

OS Design and Structure

  • OS design
    • 설계는 목적과 상세 사항의 정의로 시작
      • 사용하는 하드웨어, 시스템 종류 (모바일 등 특정 목적)에 영향
    • 사용자 / 시스템 관점을 볼 필요가 있음
      • 사용자 관점 : 사용 편의성, 이용 난이도, 속도 등
      • 시스템 관점 : 설계 및 구현, 관리 용이성, 오류 신뢰성
    • 설계의 분리
      • 정책 : 어떠한 작업을 할 것인가
      • 동작 : 어떻게 할 것인가
      • 수정이 적은 부분과 많은 부분을 분리
    • OS의 구현
      • 최하단은 assembly (하드웨어 컨트롤)
      • 주요 내용은 C로
      • 시스템 프로그램은 C/Cpp, 스크립트는 최근 쉘이나 파이썬이 이용되기도 함
  • OS Structure
    • Unix (Monolithic Kernel)
      • 커널 내에 모든 기능 포함(I/O handling, filesystem, CPU schedule 등)
      • 빠르지만 복잡함
    • Linux (Monolithic + Modular)
      • 각 시스템 기능을 각각의 메모리 공간으로 할당
    • Layerd approach
      • 운영체제를 기능에 따라 층으로 분리
      • 낮을수록 HW에, 높을수록 유저층에 가까움
      • 자신과 자기보다 하위 층으로만 접근 가능
      • 디버깅이 용이(하위 Layer부터 순차적으로 검증)
      • User Program이 시스템을 이용할 때 Layer를 거쳐야 하는 만큼 Call 회수가 많아지는 단점 존재
    • Microkernel
      • Window, Linux 등의 커널 구조와 반대
      • Mach가 대표적인 예
      • 커널에는 최소한의 기능만 부여하고, 대부분을 유저 기능으로 할당
      • 각 기능 간의 통신은 message passing으로 구현
        • file system, application, driver 등의 user mode로 구현된 기능들의 message passing(MPI)는 kernel을 통해 전달
      • 구현, 디버깅, 관리가 용이
      • 속도가 느림 (User-kernel 간 교환의 overhead)
728x90

+ Recent posts