Operating System Services
- User interface: GUI, CLI, Touch-screen interface
- Program execution: 프로그램을 실행하기 위해서는 메모리에 로드해야 함
- I/O operations: 실행 프로그램이 I/O를 요구할 수 있음
- File-system manipulation: 프로그램은 파일이나 폴더를 읽고, 쓰고, 만들고, 삭제하고, 조회하고, 허가 관리를 함
- Communnicatins: 실행 중인 프로세스간 발생 - shared memory, message passing을 통해 이루어짐
- Resource allocation: 동시에 여러 사용자나 작업이 실행될 때 자원이 할당되어야 함
- Logging: 프로그램의 컴퓨터 자원 사용을 추적
- Protection and security: 컴퓨터에 저장한 정보의 사용을 제어하기를 원하는 경우 등
- Protection: 시스템 자원에 대한 접근 제어
- Security: 사용자 인증 요구, 유효하지 않은 접근 시도 방어
A View of Operating System Services
System Calls
- 운영체제가 제공하는 서비스를 사용할 수 있게 해주는 인터페이스
- 응용 프로그램 개발자들은 시스템 콜을 직접 사용하기보다 API를 이용해 프로그램 설계
- Windows용 Wind32 API, POSIX API(유닉스 계열 OS), JVM Java API
- 시스템 콜 대신 API를 사용하는 이유
- 프로그램 이식성 -> API를 지원하는 모든 운영체제에서 실행 가능
- 시스템 콜은 다루기 어려움
- 운영체제가 시스템 콜을 제공하는 방법 예시
- 파일 복사: cp in.txt out.txt
- 프로그램이 사용자에게 직접 물어보는 방식(마우스나 아이콘 기반 등) -> 많은 I/O 시스템 콜 필요
Example of Standard API
- 다른 파일로 한 파일의 내용을 복사
- Standard API의 경우
- read() 함수를 사용
- ssize_t, size_t: 데이터 타입
- int fd: 파일 디스크립터
- void *buf: 읽은 데이터를 넣을 버퍼
- size_t count: 버퍼에 읽을 최대 바이트 수
#include <unistd.h>
ssize_t read (int fd, void *buf, size_t count)
System Call Implementation
- Run-Time Environment(RTE): 프로그래밍 언어로 작성된 애플리케이션을 실행하기 위한 전체 소프트웨어 환경
- 컴파일러, 인터프리터, 라이브러리, 로더 등
- RTE는 system-call interface를 제공
- API에서 호출된 함수를 가로채서 OS 내 필요한 시스템 콜 발생
- 일반적으로 시스템 콜에는 번호가 지정되어 있고 번호를 기준으로 인덱스 테이블을 유지
- 커널 내에서 시스템 콜 호출 후 상태(결과)를 반환
API - open() System Call
System Call Parameter Passing
- 시스템 콜 시 더 많은 정보가 요구될 수 있음 - 입력 시 소스로 사용할 파일이나 메모리 버퍼의 길이나 주소 등
- OS로 파라미터를 전달하는 일반적인 방법
- registers에 전달 -> 레지스터보다 더 많은 파라미터가 있을 수 있음!
- block or table in memory에 저장 후 주소를 레지스터에 전달 -> Linux, Solaris에서 사용
- 프로그램에 의해 stack에 push되고 OS에 의해 pop하여 사용
Passing of Parameters as a Table
Types of System Calls
- Process control
- create/terminate process, load, execute, wait/signal event, allocate and free memory...
- File management
- create/delete file, open, close, read, write, reposition, get/set fiile attributes...
- Device management
- request/release device, read, write, reposition, get/set device attributes, attach/detach devices...
- Information maintenance
- get/set time/date, get/set system data, get/set process/file/atttributes...
- Communications
- create/delete communication connection, send/recive messages, transfer status information, attach/detach remote devices...
- Protection
- get/set file permissions
System Services
- System services(= system utilities): 프로그램 개발과 실행에 편리한 환경 제공
- 파일 관리: 파일과 디렉터리의 생성, 삭제, 복사, 이름수정, 출력, 리스트 등
- 상태 정보: 날짜, 시간, 사용 가능한 메모리 용량, 디스크 공간, 사용자 수 등
- 파일 수정: 디스크에 저장된 파일을 생성하거나 수정하는 텍스트 편집기
- 프로그래밍 언어 지원: 컴파일러, 어셈블러, 디버거, 인터프리터
- 프로그램 로딩과 실행: absolute loader, relocatable loader, linkage editor, overlay loader
- 소통: 프로세스/사용자/컴퓨터시스템 간의 가상 연결 생성 메커니즘
- 백그라운드 서비스: 어떤 프로세스는 시스템 종료까지 계속 실행됨
- 서비스, 서브시스템, 데몬
Linkers and Loaders
- 프로그램을 컴파일한 후 메모리에 놓아 실행 준비를 마치는 과정
- Compiler
- 소스 프로그램을 오브젝트 파일로 변환
- 오브젝트 파일은 어떤 물리적 위치에서도 로딩 가능해 relocatable object file이라고도 부름
- Linker
- 이러한 오브젝트 파일을 하나의 바이너리 실행가능한 파일로 결합
- 다른 오브젝트 파일이나 라이브러리를 포함
- Loader
- 메모리에 로드하여 실행 준비
- 메모리 주소를 재조정하는 작업을 relocation이라고 함 -> 오브젝트 파일이 합쳐진 후 주소가 변경될 수 있음
- Compiler
Operating System Design and Implementation
- 초기 운영체제는 어셈블리어로 작성
- 현대는 고급 언어(C, C++)로 작성
- 장점: 코드를 빠르게 읽을 수 있고 compact하며 이해 및 디버깅에 좋음
- 단점: 속도가 느리고 저장 공간 증가
OS Structure: Monolithic Structure
- 단일 구조 - 가장 단순하고 흔한 구조
- UNIX OS는 시스템 프로그램과 커널로 구성
- 커널: 여러 인터페이스와 장치 드라이버로 나뉘어 있음.여러 기능을 시스템 콜을 통해 제공.
OS Structure: Layered Approach
- monolithic approach = tightly coupled system
- loosely coupled system: 특정 기능만 수행하는 작은 컴포넌트들로 분리
- OS를 여러 레이어로 나누면 layer 0은 하드웨어이고 layer N(highest)는 user interface
- 각 레이어는 오직 더 낮은 레이어의 서비스만 사용하도록 구성
- 구성과 디버깅이 간단해짐
- 그러나 완전히 계층적인 구조만 사용하는 OS는 적음 -> 각 레이어 정의가 어려움
'대학공부 > 운영체제' 카테고리의 다른 글
4. Threads & Concurrency (0) | 2025.04.10 |
---|---|
3. Processes (0) | 2025.04.10 |
Chapter 1. Introduction (0) | 2023.10.22 |