4 분 소요

1. 운영체제 서비스

운영체제 서비스 관점 – 프로그램 실행환경 제공

image

사용자를 위한 서비스

사용자 인터페이스(UI) - 거의 모든 운영체제가 제공

  • 명령어 라인 인터페이스(CLI)
  • 그래픽 사용자 인터페이스(GUI)
  • 배치 인터페이스 - batch 프로그램, shell 프로그램

프로그램 실행

  • 프로그램을 메모리에 적재(load) 후 실행(run)시킴
  • 실행되는 프로그램을 종료시킴
    • 정상적 종료
    • 비정상적 종료 - 오류 등 요인

입출력 작업

  • 입출력 동작의 효율과 보호를 위해서
    • 사용자가 직접 입출력을 수행할 수 없게 함
  • 대신에 운영체제가 입출력 수행 서비스를 제공

파일 시스템 연산

  • 파일/디렉토리 read/write/create/delete
  • 파일 검색, 파일 목록 및 정보 출력
  • 파일/디렉토리 접근 권한 관리 등

통신

  • 프로세스 간에 정보를 교환
    • 동일 컴퓨터 내의 프로세스 간
    • 컴퓨터 네트워크로 연결된 다른 컴퓨터의 프로세스 간
  • 정보 교환 방법
    • 공유 메모리(shared memory) 경유 – 동일 컴퓨터
    • 메시지 전송(message passing) 방법 – 동일/다른 컴퓨터

오류 탐지

  • 오류 발생 요인 → 오류 발생 시 하드웨어/내부 인터럽트로 CPU에게 알림
    • CPU
    • 메모리 – 메모리 패리티 오류 등
    • 입출력 장치 – 네트워크 접속 실패, 프린터 종이 부족, 저장장치 패리티 오류 등
    • 사용자 프로그램 – overflow, 허가 받지 않은 위치의 메모리 접근 등
  • 오류가 발생할 때, 운영체제는 올바르고 일관성 있는 계산을 보장하기 위해 각 오류에 대해서 적절한 조치를 취해야 함.
    • 시스템 정지(halt)
    • 오류 발생 프로세스 종료(terminate) – 오류 코드 반환
    • 오류 원인 제거 후 재실행
  • 디버깅 툴 제공

시스템을 위한 서비스 - 효율적인 동작 보장

자원 할당(resource allocation)

  • 자원(resource)
    • 물리적 자원 - CPU cycle, main memory, 저장장치, 네트워크, 여러 입출력 장치 등
    • 추상적 자원 – 파일(file), 페이지(page), 프로세스(task), 프로토콜 등 운영체제가 관리를 위해 추상화한 객체
  • 운영체제는 다수의 사용자/다수의 프로세스에게 자원을 할당
  • 일부 자원은 특별한 할당 방법을 사용
  • 나머지 자원은 일반적인 request(open)/release(close) 방법을 사용

회계(accounting)

  • 컴퓨터 자원에 대한 사용 기록 – 어떤 자원을 얼마나 사용했는가
  • 사용 통계 또는 사용 요금 청구에 사용됨

보호(protection)와 보안(security)

  • 보호(protection) – 한 프로세스가 다른 프로세스나 운영체제의 동작을 방해하지 않도록 시스템 자원에 대한 접근을 통제하는 것 (내부 통제)
  • 보안(security) – 외부로부터의 부적합한 시스템 접근을 통제하는 것
    • 사용자 인증
    • 외부와 연결되는 입출력 장치의 부적합 접근 시도 방지
    • 침입탐지를 위한 모든 접속 기록(로그)


2. 사용자 운영체제 인터페이스

명령어 해석기(command interpreter)

  • command를 입력 받아서 수행
    • (예) UNIX/Linux shell, MS-DOS, Windows cmd, powershell
  • 구현 방법
    • 커널에 포함되어 구현
    • 작업이 시작되거나, 로그온할 때에 대화형으로 수행되는 특수한 프로그램으로 구현
  • 여러 명령어 해석기를 제공하는 시스템에서는 선택하여 사용 가능
    • UNIX/Linux : Bourne shell (sh), C shell (csh), bash ksh …

명령어 처리의 구현

  • 내장 명령어
    • 명령어 해석기에 명령어 처리 코드를 포함
    • 유틸리티 명령어
      • 명령어가 명령어 실행 파일을 나타냄
      • 명령어 해석기는 단순히 이 파일을 적재하여 실행 →새로운 명령어를 쉽게 추가 가능 (셸의 수정 불필요)

Bourne Shell 명령어 해석기

image

그래픽 사용자 인터페이스(GUI)

그래픽 사용자 인터페이스

  • 사용자 친화적 인터페이스 → WIMP
  • Windows
    • 초창기의 Windows는 MS-DOS 기반, 현재 Windows 11
  • UNIX 운영체제 – GUI도 제공. 필요 시 GUI 사용 가능
    • 다양한 GUI 환경 제공
  • 모바일 시스템 - 터치스크린 인터페이스

Mac OS X GUI

image

사용자 인터페이스의 선택

명령어 라인 인터페이스(CLI)

  • 시스템 관리자, 파워 유저가 많이 사용 - 작업에 빨리 접근, 효율적
  • 어떤 시스템은 GUI를 통해 일부 기능만 사용 가능하며 나머지 작업은 CLI를 사용해야 함 → 예) 명령어 등
  • 프로그램 기능이 있어서 반복적 작업에 효과적 → 셸 스크립트, 일부 유틸리티 프로그램

그래픽 사용자 인터페이스(GUI)

  • 사용하기 쉬움

사용자 인터페이스는 대개 OS의 직접적인 기능이 아님

  • 사용자 인터페이스는 사용자마다 다를 수도 있음
  • 대개, 운영체제 시스템 구조에 포함되지 않음


3. 시스템 호출(system call)

  • 커널에 있는 서비스를 사용자 프로그램이 호출하는 것을 의미한다. 사용자 프로그램은 커널에 직접 접근할 수 없기 때문에, 시스템 호출을 통해 커널에 있는 서비스를 사용할 수 있다.

  • 운영체제가 제공하는 서비스에 대한 프로그래밍 인터페이스 제공
  • 운영체제 프로그래밍 인터페이스
    • 대개 C/C++와 같은 고급 언어 루틴 형태로 제공 → 프로그래머가 시스템 호출에 대한 C/C++함수를 호출하여 사용
      • 서비스를 수행하는 저수준의 작업은 시스템 호출 명령어를 포함하는 어셈블리 코드를 포함하여 작성됨
    • MS-DOS는 시스템 호출 명령어를 사용하는 어셈블리언어 프로그램으로 운영체제 서비스 를 요청하도록 되어 있음

시스템 호출(system call) 명령어 (= 소프트웨어 인터럽트 명령어) 예

image

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

API (Application Programming Interface)

  • 응용 프로그래머에서 사용 가능한 함수의 집합을 지정 (라이브러리 형태)
  • 프로그래머는 시스템 호출을 직접 사용하는 것 대신에 API를 많이 사용

시스템 호출보다 API를 더 많이 사용하는 이유

  • 프로그램 이식성
  • 사용하기 쉬움

대표적인 API

  • Windows API
  • POSIX API – UNIX, Linux, Mac OS X
  • Java API – Java virtual machine (JVM)

시스템 호출의 구현

각 시스템 호출에 번호가 부여됨

  • OS 커널에서 시스템 호출 처리 루틴의 주소 테이블의 인덱스 이 번호를 사용함

시스템 호출 인터페이스

  • 매개 변수 전달 받음
  • 관련된 시스템 호출을 호출
  • status와 반환 값 반환

운영체제 인터페이스의 상세 내용은 API에 의해서 숨겨짐

  • 대개 run-time support library에 의해서 관리됨
  • 사용자는 API 매개변수 규칙을 준수하고, 시스템 호출의 결과로 OS가 수행하는 작업에 대해서 이해하면 됨

시스템 호출의 OS 내에서의 처리

image

시스템 호출 매개변수 전달

매개변수는 일반적으로 운영체제 함수에 필요한 정보를 담고 있다. 예를 들어, 파일을 열거나 읽기 위해 필요한 파일 이름, 파일 모드, 읽기 또는 쓰기 위치 등이 매개변수로 전달될 수 있다

시스템 호출 매개변수 전달 방법

  • 레지스터(register) – 레지스터에 매개변수 저장, 개수 제한
    • 매개변수가 많으면 블록을 사용하여 추가 전달
    • 매개변수의 개수가 적을 때 유용하며, 매우 빠른 실행 속도를 제공
  • 블록(block) – 메모리 블록에 매개변수를 저장하고, 블록의 주소를 레지스터를 통해 전달

  • 스택(stack) – 응용 프로그램이 시스템 스택에 push, 운영체제에서 pop
    • (실제로는 pop없이 스택을 접근하여 매개변수를 참조함)
    • 매개변수의 개수가 많거나 크기가 큰 경우에 적합

image

태그: ,

카테고리:

업데이트:

댓글남기기