이번 포스팅 목표
- 운영체제가 사용자에게 제공하는 서비스에 대해 알아가는 것
- 사용자에게 서비스를 제공하기 위한 방식(인터페이스)을 알아가는 것
1. 운영체제 서비스
- 운영체제는 프로그램과 그 사용자에게 특정 서비스를 제공
- 서비스로 인해 프로그래머가 작업을 더 쉽게 수행 가능
운영체제 서비스를 바라보는 관점 - 사용자에게 도움을 주는 목적
사용자 인터페이스(UI)
: 거의 모든 운영체제가 제공- 그래픽 사용자 인터페이스(GUI), 터치 스크린 인터페이스, CLI 등
- 그래픽 사용자 인터페이스(GUI), 터치 스크린 인터페이스, CLI 등
프로그램 수행(program execution)
:시스템은 프로그램을 메모리에 적재해 실행 가능해야 함- 프로그램 무조건 실행을 끝낼 수 있어야 함(정상이든, 비정상이든)
- 프로그램 무조건 실행을 끝낼 수 있어야 함(정상이든, 비정상이든)
입출력 연산(I/O)
: 수행 중인 프로그램은 입출력을 요구할 수 있음- 입출력에는 파일 혹은 입출력 장치가 연관될 수 있음
- 사용자들은 통상 입출력 장치를 직접 제어할 수 없다. → 효율과 보호를 위함 → 운영체제가 제공
파일 시스템 조작
: 특정 특성과 성능 특성을 제공을 위해 다양한 파일 시스템 제공 → 특히 중요한 부분- 프로그램은 파일을 생성하고, 삭제하고, 읽고, 쓰고, 찾고, 정보를 열거가 가능해야 함
- 몇몇 프로그램은 파일 권한 관리를 이용해 접근 허가 및 거부가 가능함
통신(communication)
- 통신을 수행하는 2가지 중요한 방법 존재
- 공유 메모리를 통해 구현
- 메시지 전달 기법을 사용하여 구현
- 정보의 패킷들이 운영체제에 의해 프로세스들 사이를 이동
- 정보의 패킷들이 운영체제에 의해 프로세스들 사이를 이동
- 프로세스 간의 정보 교환이 발생하는 상황
- 동일한 컴퓨터에서 수행되고 있는 프로세스 사이에서
- 같은 네트워크에 있는 다른 컴퓨터 시스템 상에서 수행되는 프로세스 사이에서
- 통신을 수행하는 2가지 중요한 방법 존재
오류 탐지(error detection)
: 운영체제는 모든 가능한 오류를 항상 의식하고 있어야 한다.- CPU, 메모리 하드웨어, 입출력 장치, 사용자 프로그램에서 발생 가능
- 탐지 이유 : 올바르고 일관성 있는 계산을 보장하기 위해
- 디버깅 설비는 시스템을 효율적으로 사용할 수 있는 사용자와 프로그래머의 능력을 향상함
운영체제 서비스를 바라보는 관점 - 시스템 자체의 효율적 동작 보장
- 운영체제 기능 중에는 사용자 도움보다는 시스템 자체의 효율적인 동작을 위한 기능도 존재
- 다수의 프로세스가 사용하는 시스템 → 프로세스들 간에 컴퓨터 자원을 공유
- 다수의 프로세스가 사용하는 시스템 → 프로세스들 간에 컴퓨터 자원을 공유
자원 할당(resource allocation)
: 다수의 프로세스 및 작업이 동시 실행 시, 각각에게 자원 할당 필요- 운영체제는 여러 가지 다른 종류의 자원을 관리
- 특수한 할당 코드를 가질 수 있는 것 → CPU 사이클, 메인 메모리, 파일 저장장치
- 일반적인 요청과 방출 코드를 가지는 것 → 입출력 장치
- 운영체제 스스로 자원을 최대한 효율적으로 이용하기 위한 각 요소만의 할당 루틴을 가지고 있음
- CPU 스케줄링 루틴이 CPU의 속도, 필수 프로세스, CPU의 처리 코어 개수, 기타 요인을 고려
- CPU 스케줄링 루틴이 CPU의 속도, 필수 프로세스, CPU의 처리 코어 개수, 기타 요인을 고려
- 운영체제는 여러 가지 다른 종류의 자원을 관리
기록 작성(logging)
: 어떤 프로그램이 어떤 종류의 컴퓨터 자원을 얼마나 사용했는지를 추적- 기록 관리는 회계 또는 단순 통계를 위해 사용
- 사용 통계는 컴퓨팅 서비스 개선을 위한 시스템 재구성에 귀중한 자료가 될 수 있음
- 사용 통계는 컴퓨팅 서비스 개선을 위한 시스템 재구성에 귀중한 자료가 될 수 있음
- 기록 관리는 회계 또는 단순 통계를 위해 사용
보호와 보안(Protection & security)
:- 서로 다른 여러 프로세스가 병행하게 수행될 때 : 한 프로세스나 운영체제 자체를 방해하면 안 됨
- 보호 → 시스템 자원에 대한 모든 접근이 통제되도록 보장하는 것이 필요함
- 보안
- 외부 입력 장치들을 부적합한 접근 시도로부터 지킴
- 침입의 탐지를 위해 모든 접속을 기록하는 것으로 범위를 넓힘
- 보안 순서 : 사용자가 자원에 접근 → 통상 패스워드 사용하여 자기 자신 인증
- 시스템이 보호되고 보안이 유지되려면, 시스템 전체에 걸쳐 예방책이 제정되어야 함
2. 사용자와 운영체제 인터페이스
- 사용자가 운영체제가 접촉하는 방식에는 3가지가 존재
- 명령 인터프리터(Command interpreter)
- 그래픽 기반 사용자 인터페이스(Graphical User Interface)
- 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 파일 내에 정의되어 있음
→ 명령 인터프리터는 아주 작아지고, 새로운 명령을 추가할 필요가 없어짐
- rm이라는 파일을 찾아 그 파일을 메모리에 적재 후, 매개변수 file.txt로 수행
- 명령 인터프리터는 전혀 그 명령을 알지 못함
- 명령 인터프리터 자체가 명령 실행 코드를 가지는 경우
그래픽 기반 사용자 인터페이스(GUI)
- 마우스를 기반으로 하는 윈도 메뉴 시스템을 사용 → 마우스로 화면상의 아이콘을 클릭
- 최초의 GUI는 1973년, 하지만 상용화는 1980년대
터치스크린 인터페이스(Touch-Screen Interface)
- 사용자가 터치스크린에 손가락을 누르는 등의 제스처를 취하여 상호작용
- iPad와 iPhone은 모두 Springboard 터치스크린 인터페이스를 사용
인터페이스의 선택
명령어 라인 인터페이스(CLI)
: 시스템 관리자, 시스템에 대해 깊게 알고 있는 파워 유저들이 선호- 하고자 하는 작업에 대해 더 빨리 접근할 수 있음
- 몇몇 시스템에서는 GUI를 통해서는 시스템 기능의 일부만 사용할 수 있음
- 프로그래밍을 통해 반복적인 작업을 쉽게 할 수 있음
- 예 : 자주 사용되는 작업이 CLI의 여러 절차가 필요하다면, 이 절차를 파일로 저장하고 이용
→ 이러한 프로그램은 컴파일되지는 않지만 CLI에 의해 번역되면서 실행될 수 있다(셸 스크립트)
- 예 : 자주 사용되는 작업이 CLI의 여러 절차가 필요하다면, 이 절차를 파일로 저장하고 이용
그래픽 기반 사용자 인터페이스(GUI)
: 대부분의 사용자- 대부분의 사용자는 셸 인터페이스는 거의 사용하지 않음
- 최신버전의 Windows 운영체제는 GUI와 태블릿용 터치스크린을 모두 제공
- 의미
- 사용자 인터페이스는 시스템마다, 때로는 한 시스템의 사용자마다도 다를 수 있다.
→ 운영체제의 직접적인 기능은 유용하고 친밀한 사용자 인터페이스를 설계하는 것이 아니다.
- 사용자 인터페이스는 시스템마다, 때로는 한 시스템의 사용자마다도 다를 수 있다.