호우동의 개발일지

Today :


시스템 서비스

  • 시스템 유틸리티라고도 불리고 프로그램 개발과 실행을 위해 더 편리한 환경을 제공
    • 일부 : 단순한 시스템 콜에 대한 사용자 인터페이스
    • 대부분 : 훨씬 더 복잡함

  • 시스템 서비스는 다음의 범주로 분류 가능
    • 파일 관리
      • 이 프로그램은 파일과 디렉터리 제어와 관련된 조작을 한다.
        • 파일 디렉터리 생성, 삭제, 복사, 이름 바꿈, 인쇄, 열거, 조작 등

    • 상태 정보
      • 통상 이 프로그램들은 정보를 출력 장치 혹은 파일로 포맷하여 인쇄, 혹은 GUI의 윈도에 표시
        • 단순히 는 날짜, 시간, 가용 메모리, 디스크 공간의 양, 사용자 수 등의 상태 정보 제공
        • 복잡하게는 상세한 성능, 로깅 및 디버깅 정보를 제공
      • 몇몇 시스템은 환경 설정 정보를 저장하고 검색할 수 있는 등록 기능 제공

    • 파일 변경
      • 디스크나 다른 저장 장치에 있는 파일을 변경하기 위해 사용하는 텍스트 에디터

    • 프로그래밍 언어 지원
      • 프로그래밍 언어에 대한 컴파일러, 어셈블러, 디버거 및 해석기가 운영체제와 함께 제공

    • 프로그램 적재와 수행
      • 프로그램이 어셈블 되거나 컴파일된 후, 실행되기 위해선 반드시 메모리에 적재되어야 함
        → 로더(loader)가 필요

      • 시스템은 절대 로더, 재배치 가능 로더, 링키지 에디터, 중첩 로더 등 제공
      • 고급 어나 기계어를 위한 디버깅 시스템도 필요

    • 통신
      • 해당 프로그램은 프로세스, 사용자, 컴퓨터 시스템들 사이에 가상 접속을 이루기 위한 기법 제공
      • 다른 사용자 화면으로 메시지 전송, 웹페이지 탐색, 전자우편, 원거리 로그인, 파일 전송 등

    • 백그라운드 서비스
      • 모든 범용 시스템은 부트 할 때 특정 시스템 프로그램을 시작시킬 수 있는 방법을 가지고 있음
        → 그런 서비스 중, 시스템이 종료할 때까지 항상 실행되는 시스템 프로그램 프로세스
        • 서비스, 서브 시스템, 디먼이라고도 불림
        • 예 : 프로세스 스케줄러, 시스템 오류 감시 서비스 및 출력 서버

      • 운영체제는 시스템 프로그램과 함께 문제 해결과 연산 수행을 위한 응용 프로그램도 함께 제공
        • 응용 프로그램 : 웹브라우저, 워드 프로세서, 데이터베이스 시스템, 게임 등등..
      • 사용자가 보는 운영체제의 관점은 시스템 콜보다는 시스템 프로그램과 응용에 의해 정의됨

 

 


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

  • 응용 프로그램 수준에서 운영체제와 함께 GUI 인터페이스와 같은 라이브러리 포함
  • API 집합을 호출하도록 설계된 응용 프로그램 같은 경우 다른 곳에서 작동하지 않을 수도..

 


저 레벨 수준의 어려움

  1. 각 운영체제에 헤더, 명령어 및 변수의 배치를 강제하는 응용 프로그램 이진 형식이 존재
    → 이러한 구성요소로 인해 명시된 구조 형태로만 있어야 운영체제가 파일을 열고 올바르게 실행됨

  2. CPU는 다양한 명령어 집합을 가지며 해당 명령어가 포함된 응용 프로그램만 올바르게 실행 가능

  3. 운영체제마다 시스템 콜의 호출 방법, 번호, 의미, 반환 결과를 포함한 여러 측면이 다르다.

 


그래도 다른 운영체제에서 동일 응용프로그램을 사용 가능한 방법

  1. 응용 프로그램은 운영체제마다 인터프리터가 제공되는 인터프리터 언어로 작성될 수 있다.
    → 인터프리터가 소스를 해석하고, 상응하는 기계어 명령얼 실행하고, 해당 운영체제의 시스템 콜 호출
     
    • 단점
      • 기계어 코드로 구성된 응용 프로그램에 비해 성능이 떨어짐
      • 인터프리터는 각 운영체제 기능의 일부만 제공하므로, 관련 응용 프로그램의 기능도 제한
  1. 응용프로그램이 가상 머신을 가진 언어로 작성된 경우 (Java 같은 것)
    • 인터프리터와 유사한 단점을 가짐

  2. 응용 프로그램 개발자는 컴파일러가 기기 및 운영체제의 이진 파일 생성하는 표준 언어 및 API를 사용
    • 응용 프로그램은 실행될 각 운영체제로 이식되어야 한다.
    • 이식은 많은 시간이 소요될 수 있으며, 응용 프로그램의 새 버전마다 수행되어야 함.
    • 예 : UNIX 운영체제 변종 간의 소스 코드 호환성을 유지하기 위한 POSIX API와 표준 집합

 


ABI(Application binary interface)

  • 아키텍처 수준에서 이진 코드의 구성 요소가 아키텍처에서
    특정 운영체제와 상호작용 할 수 있는 방법을 정의하는 데 사용

  • 하위 수준의 세부 정보를 명시
    • 주소 길이, 시스템 콜에 매개변수를 전달하는 방법, 런타임 스택 구성, 데이터 유형의 크기..
    • ABI는 특정 아키텍처에 대해 명시됨 → ABI는 아키텍처 수준의 API

  • 이진 실행 파일이 특정 ABI에 따라 컴파일되고 링크된 경우,
    해당 ABI를 지원하는 다른 시스템에서도 실행될 수 있어야 함
    • 특정 아키텍처에서 실행되는 특정 운영체제에 대해 ABI가 정의되어 있음
      ABI는 플랫폼 간 호환성을 거의 제공하지 않음