Home > cs > os > chapter2 운영체제 구조

chapter2 운영체제 구조
cs os

운영체제 서비스

  • 사용자 인터페이스
    • GUI, CLI
  • 프로그램 수행
  • 입출력 연산
  • 파일 시스템 조작
  • 통신
    • 한 프로세스가 다른 프로세스와 정보를 교환할 때
    • 네트워크에 의해 묶여 있는 서로 다른 컴퓨터 상에서 실시될 때
  • 오류 탐지
  • 자원할당
    • 다수의 프로세스나 다수의 작업이 동시에 실시될 때
    • CPU를 효율적으로 사용하기 위해서
  • 기록작성
  • 보호와 보안

사용자와 OS 인터페이스

사용자와 운영체제가 접촉하기 위해서는 CLI 아니면 Command interpreter가 필요하다.

  • 명령 인터프리터
    • 쉘이라는 인터프리터 해석기를 이용한다
    • 대부분 유사한 기능을 제공
    • 사용자가 지정한 명령을 가져와서 그것을 수행
  • 아니면 UNIX 명령어로 구현이 가능하다
  • GUI, 그래픽 기반 사용자 인터페이스
    • window의 사용방식
  • 터치스크린 인터페이스
  • 인터페이스 선택
    • 시스템 관리자는 CLI를 선호
    • 쉘 스크립트를 좋아한다.

시스템 콜

운영체제에 의해 사용 가능하게 된 서비스에 대한 인터페이스를 제공
하드웨어에 직접 접근해야 하는 저수준의 작업에서 어셈블리 명령을 통해 작성된다.

API, 응용 프로그래밍 인터페이스

각 함수에 전달되어야 할 매개변수들과 프로그래머가 기대할 수 있는 반환값을 포함하여 application programmer가 사용 가능한 집합을 명시한다,

API를 구헝하는 함수들은 프로그래머를 대신하여 실제 시스템 콜을 호출한다.

API 함수를 통해 시스템 콜을 사용하는 이유 → 어느 시스템에서건 실행하는 것을 기대할 수 있기 때문에

RTE→ 실행시간 환경

운영체제가 제공하는 시스템 콜에 대해 연결고리 연결 역할을 하는 시스템 콜 인터페이스를 제공

이 번호에 따라서 색인되는 테이블을 유지한다.

시스템 콜 유형

  • 프로세스 제어
  • 파일 조작
  • 장치 조작
  • 정보 유지 보수
  • 통신과 보호

프로세스 제어

실행중인 프로그램 수행을 end() 하거나 abort()를 시행할 수 있어야 한다

문제가 발생해 trap이 발생한 경우 오류 메시지를 출력하거나 디버거에 의해 검사될 수 있다.

API를 통한 시스템 콜로 데이터를 읽을거나 쓸 수 있고 또한 데이터 공유를 일관성을 위해 잠글 수 있다. → acquire_lock(), release_lock()

다른 시스템 콜 집합은 프로그램 디버깅에 도움이 된다. 많은 시스템이 메모리를 dump()하기 위한 시스템 콜이 제공된다.

링커와 로더

링커 → 재배치 가능 오브젝트 파일을 하나의 이진 실행 파일로 결합

로더 → 이진 실행 파일을 메모리에 적재하는데 사용

이 둘은 재배치를 하여 프로그램 부분에 최종 주소를 할당하고 프로그램 코드와 데이터를 해당 주소와 일치하도록 조정하여 프로그램이 실행될 때 코드가 라이브러리 함수를 호출하고 변수에 접근가능하도록 한다.

윈도우는 이를 위해 동적 링킹 라이브러리 (DLL, dynamic, linked library)

unix, linux는 표준형식을 ELF(executable and linkable format)으로 제공한다. 재배치 가능 파일과 실행파일 각각을 위한 별도의 ELF 형식이 제공된다.

운영체제 구조

현대의 운영체제는 한개의 일관된 시스템보다는 테스크를 작은 구성요소로 분할하는 것이다.

여러 함수를 만들고 main()에 모아서 한꺼번에 호출하는 형태를 가진다.

  • 모놀리식 구조, monolithic structure
    • 일반적인 기술
    • 최초의 UNIX OS, 커널과 시스템 프로그램 2 부분으로 구성
    • 커널
      • 여러가지 인터페이스와 장치 드라이버로 구성
      • 시스템 콜 인터페이스 아래와 물리적 하드웨어 위의 모든 것이 커널이다.
    • 성능에는 뚜렷한 이점이 있다.
      • 오버헤드가 거의없고 커널 안에서 통신 속도가 빠르다
    • 단순하지만 구현 및 확장이 어렵다
  • 계층적 접근
    • 느슨하게 결합된 시스템
    • 기능이 개별적이고 작은 구성요소로 나뉜다
    • 모든 구성요소가 합쳐져 커널을 구성
    • 여러층의 인터페이스를 가진다
    • 구현과 디버깅이 간단해진다.
    • 각 층은 자신보다 하위 수준의 층에 의해 제공된 연산들만 사용해 구현
  • 마이크로 커널
    • 모든 중요하지 않은 요소는 커널에서 제거
    • 이들을 별도의 주소 공간에 존재하는 사용자 수준 프로그램으로 구현, 운영체제를 구성
    • 장점
      • 운영체제의 확장이 쉽다
    • 단점
      • 가중된 시스템 기능 오버헤드 때문에 성능이 나빠진다
  • 모듈
    • 적재가능 커널 모듈(loadable kernel module)기법의 사용
    • 커널은 핵심적인 구성요소의 집합을 가진다
    • 핵심은 커널은 핵심 서비스를 제공하고 다른 서비스는 커널이 실행되는 동안 동적으로 구현
      • 서비스를 동적으로 링크하는 것은 새로운 기능을 직접 커널에 구현하는 것보다는 바람직
    • 전체적인 결과는 커널의 각 부분이 정의되고 보호된 인터페이스를 가진다
    • 그렇지만 모듈에서 임의의 다른 모듈을 호출할 수 있다는 점에서 계층 구조보다 유연
    • 중심 모듈은 단지 핵심 기능만을 가지고 있고 다른 모듈의 적재 방법과 모듈들과 어떻게 통신하는지 안다는 점은 마이크로 커널과 유사
  • 하이브리드 시스템
    • linux는 전부가 하나의 주소공간에 존재하여 효율적인 성능을 제공하기 때문에 모놀리식 구조이다.
    • 성능상의 이유로 window도 모놀리식 구조이다.
    • 그렇지만 이 os들은 모듈을 사용하기 때문에 새로운 기능을 동적으로 커널에 추가하는 것이 가능하다.
    • 사용자 모드 프로세스로서 실행되는 모든 서브 시스템을 os의 인격이라고 알려진 부분을 마이크로커널의 형태를 유지하고 있다.