운영체제 서비스
사용자 업무를 수행하는데 필요한 기능을 제공하는 운영체제 서비스
사용자 인터페이스
- 명령어 라인 인터페이스 (Command Line Interface) - 문자열 명령 입력
- 배치 인터페이스 (Batch Interface) - 명령어 또는 명령어 집합을 파일로 제공
- GUI (Graphical User Interface)
- 프로그램 실행 (Execution) - 프로그램을 메모리에 적재, 실행, 실행 종료 (정상 또는 비정상)
- 입출력 연산 (I/O) - 프로그램 실행에서 요구하는 파일 또는 입출력 장치 등의 입출력 서비스
파일 시스템
- 파일과 디렉토리 생성과 삭제
- 파일과 디렉토리 읽고 쓰기
- 파일과 디렉토리 찾기
- 파일 정보 보기
- 파일 접근 권한 관리
통신
- process A가 쓰고 shared 영역에서 process B가 가져간다.
- 동일한 컴퓨터 또는 네트워크로 연결된 컴퓨터에 있는 프로세스 간 정보 교환
- 통신은 메시지 전달 기법 (운영체제가 패킷을 이동하는데 관여함) 또는 공유 메모리를 이용
오류 탐지 (Error Detection)
- 운영체제는 가능한 모든 오류를 인지하고 있어야 한다.
시스템 자원을 공유하여 시스템의 효율적인 운영을 보장하는 서비스
보호와 보안(protection and security)
- 보호는 시스템 자원에 대한 모든 접근이 통제되도록 보장하는 것 (Linux 코드에 chomd755가 있다.)
- 외부로부터 시스템 보안을 유지하기 위해 사용자 인증이 필요하고 부적합한 접근을 막아야 한다.
사용자 인터페이스 - CLI
명령어 해석기 (Command interpreter)
- CLI, 또는 명령어 해석기를 통해 명령어 직접 입력
- 커널 또는 시스템 프로그램으로 구현
- 선택 가능한 여러 개의 명령어 해석기 (shells) 제공 - UNIX, Linux
역할 : 사용자의 명령어를 가져와 그것을 실행한다.
- 명령어 해석기가 명령을 실행하는 코드를 포함하는 경우도 있음 - 명령어 개수가 프로그램 크기 결정
- 시스템 프로그램으로 명령 구현 (UNIX) - 명령 해석기 프로그램 크기가 작아짐
시스템 콜 (System Calls)
- 시스템 콜은 운영체제가 제공하는 서비스에 대한 인터페이스를 사용자에게 제공한다.
- 대부분 직접적인 콜 사용보다 고급의 API를 통해 접근한다.
- 사용자 프로그램 -> API 사용 -> 시스템 콜
시스템 콜 구현
- 통상적으로, 각 시스템 콜에 대하여 숫자가 부여된다. - 시스템 콜 인터페이스가 이 숫자로 된 인덱스를 가진 테이블을 관리한다.
- 시스템 콜 인터페이스가 운영체제 커널 내에 있는 요청된 시스템 콜을 하고 시스템 콜의 반환 상태화 해당 반환 값을 반환한다.
시스템 콜 유형 (5종류)
프로세스 제어
- 프로세스 생성(create process), 프로세스 종료(terminate process)
- 정상적 종료(end), 비정상적 종료(abort)
- 프로세스 속성(attributes) 획득(get), 프로세스 속성 설정(set)
- 시간 대기 , 사건 대기(wait event), 사건 알림(signal event)
- 버그 찾는 debugger, 한 단계씩 실행
- 프로세스 간에 공유 자료 접근을 관리하는 locks
파일 관리 (File management)
- 파일 생성 (create file), 파일 삭제 (delete file)
- 파일 열기 (open), 파일 닫기 (close file)
- 읽기, 쓰기, 위치 변경 (read, write, reposition)
- 파일 속성 획득 및 설정 (get and set file attributes)
장치 관리 (Device management, Plug & Play)
- 장치 요청, 장치 방출 (request device, release device)
- 읽기, 쓰기, 위치 변경 (read, write, reposition)
- 장치 속성 획득 및 설정 (get device attributes, set device attributes)
- 논리적 장치 부착 및 분리 (logically attach or detach devices)
정보 관리 (Information maintenance)
- 시간과 날짜의 설정과 획득 (get time or date, set time or date)
- 시스템 데이터의 설정과 획득 (get system data, set system data)
- 프로세스, 파일, 장치 속성의 획득과 설정 (get and set process, file, or device attributes)
통신(Communications)
- 통신 연결 생성, 제거
- 메시지의 송신, 수신
- 공유메모리 모델 생성, 메모리 영역 접근
보호(Protections)
- 자원 접근을 제어 (Control access to resources)
- 다중 프로그래밍 시스템
- 네트워킹과 인터넷
시스템 프로그램 (System Programs)
- 파일 관리 (File Management) - 일반적으로 파일과 디렉토리에 대하여 생성, 삭제, 복사, 개명 (rename), 프린트, 덤프, 리스트 등의 작업을 한다.
- 상태 정보 (Status Information) - 어떤 프로그램들은 시스템에 날짜, 시간, 가용한 메모리 용량, 디스크 용량, 사용자의 수 등을 요청한다.
- 다른 프로그램들은 자세한 성능, 로깅과 디버깅 정보를 제공한다. - 통상 이 프로그램들은 정보를 단말기나 다른 출력 장치 등에 서식을 갖추어 인쇄하거나 또는 GUI 윈도우에 표시한다.
- 프로그램 적재와 실행 - 절대 로더 (Absolute loaders), 재배치 가능 로더 (relocatable loaders), 링키지 에디터 (linkage editors), 중첩 로더 (overlay-loaders), 고급언어와 기계어를 위한 디버깅 시스템 등이 제공된다.
- 백그라운드 서비스 (Background Service) fg / bg (foreground / background) - 부팅시 살아나고 일부는 시스템 시작 시 살아나고 끝난다. 다른 일부는 시스템 시작과 종료까지 살아있다.
사용자 목표와 시스템 목표
- 사용자 목표 - 운영체제는 사용이 편리하고 배우기 쉽고, 안정되고, 안전하며 신속해야 한다.
- 시스템 목표 - 운영체제는 설계, 구현, 유지가 쉬워야 하며, 또한 적응성, 신뢰성, 무오류, 효율성을 가져야 한다.
정책과 기법
- 정책 (Policies) : 무엇을 할 것인가?
- 기법 (Mechanism) : 어떻게 할 것인가?
- 정책과 기법을 분리 - 나중에 정책이 변경될 때 최대한의 융통성이 생긴다.
- 예 : CPU를 계속 점유하는 것을 방지하기 위해 Timer 사용 (기법)
특정 사용자에게 타이머를 얼마나 오랫동안 설정할 것인지 결정 (정책)
마이크로 커널 시스템 구조 (Microkernel System Structure)
- 커널이 커져서 관리가 어렵게 되자 가능한 많은 기능을 커널에서 사용자 공간으로 옮겨 커널을 최소화시킴
- Mach : 카네기 멜론 대학교에서 개발한 첫 번째 microkernel
- 사용자 모듈 간의 통신은 message passing을 사용한다
- 장점 : 마이크로커널은 확장하기 좋음 , 새로운 하드웨어에 이식이 쉽다, 신뢰성 향상 , 보안성 향상
- 단점 : 사용자와 커널 간의 통신으로 인한 성능 오버헤드
운영체제 디버깅 (Operating-System Debugging)
- 운영체제는 오류 정보를 포함하는 log files를 생성한다.
- 애플리케이션이 죽으면 프로세스의 메모리를 캡처한 코어 덤프(core dump)를 생성한다.
- 운영체제가 죽으면 커널 메모리를 캡처한 비정상 종료 덤프 (crash dump)를 생성한다.
- 성능 조정(performance tuning)은 시스템 성능을 최적화한다. - 분석을 위해 기록된 시스템 동작의 추적 목록(trace listings)를 사용한다. , 통계적인 경향을 찾기 위해 프로파일링(Profiling)은 주기적으로 명령어 포인터를 채취한다.