호우동의 개발일지

Today :

article thumbnail

운영체제 서비스를 바라보는 관점


이번 포스팅 목표

  • 운영체제가 사용자에게 제공하는 서비스에 대해 알아가는 것
  • 사용자에게 서비스를 제공하기 위한 방식(인터페이스)을 알아가는 것

 


1. 운영체제 서비스

  • 운영체제는 프로그램과 그 사용자에게 특정 서비스를 제공
    • 서비스로 인해 프로그래머가 작업을 더 쉽게 수행 가능

 


운영체제 서비스를 바라보는 관점 - 사용자에게 도움을 주는 목적

  • 사용자 인터페이스(UI) : 거의 모든 운영체제가 제공
    • 그래픽 사용자 인터페이스(GUI), 터치 스크린 인터페이스, CLI 등

  • 프로그램 수행(program execution) :시스템은 프로그램을 메모리에 적재해 실행 가능해야 함
    • 프로그램 무조건 실행을 끝낼 수 있어야 함(정상이든, 비정상이든)

  • 입출력 연산(I/O) : 수행 중인 프로그램은 입출력을 요구할 수 있음
    • 입출력에는 파일 혹은 입출력 장치가 연관될 수 있음
    • 사용자들은 통상 입출력 장치를 직접 제어할 수 없다. → 효율과 보호를 위함 → 운영체제가 제공

  • 파일 시스템 조작 : 특정 특성과 성능 특성을 제공을 위해 다양한 파일 시스템 제공 → 특히 중요한 부분
    • 프로그램은 파일을 생성하고, 삭제하고, 읽고, 쓰고, 찾고, 정보를 열거가 가능해야 함
    • 몇몇 프로그램은 파일 권한 관리를 이용해 접근 허가 및 거부가 가능함

  • 통신(communication)
    • 통신을 수행하는 2가지 중요한 방법 존재
      1. 공유 메모리를 통해 구현
      2. 메시지 전달 기법을 사용하여 구현
        • 정보의 패킷들이 운영체제에 의해 프로세스들 사이를 이동

    • 프로세스 간의 정보 교환이 발생하는 상황
      • 동일한 컴퓨터에서 수행되고 있는 프로세스 사이에서
      • 같은 네트워크에 있는 다른 컴퓨터 시스템 상에서 수행되는 프로세스 사이에서

  • 오류 탐지(error detection) : 운영체제는 모든 가능한 오류를 항상 의식하고 있어야 한다.
    • CPU, 메모리 하드웨어, 입출력 장치, 사용자 프로그램에서 발생 가능
    • 탐지 이유 : 올바르고 일관성 있는 계산을 보장하기 위해
    • 디버깅 설비는 시스템을 효율적으로 사용할 수 있는 사용자와 프로그래머의 능력을 향상함

 


운영체제 서비스를 바라보는 관점 - 시스템 자체의 효율적 동작 보장

  • 운영체제 기능 중에는 사용자 도움보다는 시스템 자체의 효율적인 동작을 위한 기능도 존재
    • 다수의 프로세스가 사용하는 시스템 → 프로세스들 간에 컴퓨터 자원을 공유

  • 자원 할당(resource allocation) : 다수의 프로세스 및 작업이 동시 실행 시, 각각에게 자원 할당 필요
    • 운영체제는 여러 가지 다른 종류의 자원을 관리
      • 특수한 할당 코드를 가질 수 있는 것 → CPU 사이클, 메인 메모리, 파일 저장장치
      • 일반적인 요청과 방출 코드를 가지는 것 → 입출력 장치

    • 운영체제 스스로 자원을 최대한 효율적으로 이용하기 위한 각 요소만의 할당 루틴을 가지고 있음
      • CPU 스케줄링 루틴이 CPU의 속도, 필수 프로세스, CPU의 처리 코어 개수, 기타 요인을 고려

  • 기록 작성(logging) : 어떤 프로그램이 어떤 종류의 컴퓨터 자원을 얼마나 사용했는지를 추적
    • 기록 관리는 회계 또는 단순 통계를 위해 사용
      • 사용 통계는 컴퓨팅 서비스 개선을 위한 시스템 재구성에 귀중한 자료가 될 수 있음

  • 보호와 보안(Protection & security) :
    • 서로 다른 여러 프로세스가 병행하게 수행될 때 : 한 프로세스나 운영체제 자체를 방해하면 안 됨
    • 보호 → 시스템 자원에 대한 모든 접근이 통제되도록 보장하는 것이 필요함
    • 보안
      • 외부 입력 장치들을 부적합한 접근 시도로부터 지킴
      • 침입의 탐지를 위해 모든 접속을 기록하는 것으로 범위를 넓힘
      • 보안 순서 : 사용자가 자원에 접근 → 통상 패스워드 사용하여 자기 자신 인증

    • 시스템이 보호되고 보안이 유지되려면, 시스템 전체에 걸쳐 예방책이 제정되어야 함

 

 


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

  • 사용자가 운영체제가 접촉하는 방식에는 3가지가 존재
    1. 명령 인터프리터(Command interpreter)
    2. 그래픽 기반 사용자 인터페이스(Graphical User Interface)
    3. Touch-Screen Interface

 


명령 인터프리터(Command-Interpreter)

  • 운영체제 대부분은 명령 인터프리터를 시작 시에 사용하는 특수한 프로그램으로 취급
    • 대부분의 운영체제 → Linux, UNIX, Windows 등
    • 프로세스가 시작되거나 (대화형 시스템상에서) 사용자가 처음 로그온 하는 상황

  • 명령 인터프리터는 통상적으로 셸(Shell)이라고 불린다.
    • UNIX/Linux 시스템에서는 Bourne shell, C shell, Korn shell 등 셸을 사용자가 선택 가능
    • 대부분의 셸은 유사한 기능을 제공

  • 중요한 기능 : 사용자가 지정한 명령을 가져와서 그 명령을 수행하는 것
    • 대부분 파일 조작 명령 → 생성, 삭제, 리스트, 프린트, 복사를 수행
    • 명령어가 구현되는 방식
      • 명령 인터프리터 자체가 명령 실행 코드를 가지는 경우
        • 예 : 한 파일 삭제를 위한 명령은 명령 인터프리터가 자신의 코드 한 부분으로 분기하는 것

      • 시스템 프로그램에 의해 대부분의 명령을 구현하는 것
        • 명령 인터프리터는 전혀 그 명령을 알지 못함
          → 단지 메모리에 적재되어 실행될 파일을 식별하기 위해서만 명령을 사용

        • 예 : UNIX 명령어 - rm file.txt
          • rm이라는 파일을 찾아 그 파일을 메모리에 적재 후, 매개변수 file.txt로 수행
            → rm 명령 관련 로직은 rm 파일 내에 정의되어 있음
            → 명령 인터프리터는 아주 작아지고, 새로운 명령을 추가할 필요가 없어짐

 


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

  • 마우스를 기반으로 하는 윈도 메뉴 시스템을 사용 → 마우스로 화면상의 아이콘을 클릭
  • 최초의 GUI는 1973년, 하지만 상용화는 1980년대

 


터치스크린 인터페이스(Touch-Screen Interface)

  • 사용자가 터치스크린에 손가락을 누르는 등의 제스처를 취하여 상호작용
  • iPad와 iPhone은 모두 Springboard 터치스크린 인터페이스를 사용

 


인터페이스의 선택

  • 명령어 라인 인터페이스(CLI) : 시스템 관리자, 시스템에 대해 깊게 알고 있는 파워 유저들이 선호
    • 하고자 하는 작업에 대해 더 빨리 접근할 수 있음
    • 몇몇 시스템에서는 GUI를 통해서는 시스템 기능의 일부만 사용할 수 있음
    • 프로그래밍을 통해 반복적인 작업을 쉽게 할 수 있음
      • 예 : 자주 사용되는 작업이 CLI의 여러 절차가 필요하다면, 이 절차를 파일로 저장하고 이용
        → 이러한 프로그램은 컴파일되지는 않지만 CLI에 의해 번역되면서 실행될 수 있다(셸 스크립트)

  • 그래픽 기반 사용자 인터페이스(GUI) : 대부분의 사용자
    • 대부분의 사용자는 셸 인터페이스는 거의 사용하지 않음
    • 최신버전의 Windows 운영체제는 GUI와 태블릿용 터치스크린을 모두 제공

  • 의미
    • 사용자 인터페이스는 시스템마다, 때로는 한 시스템의 사용자마다도 다를 수 있다.
      운영체제의 직접적인 기능은 유용하고 친밀한 사용자 인터페이스를 설계하는 것이 아니다.