728x90
OS Services/Interface
- OS의 기능
- 사용자 관점
- User Interface(UI) : CLI, GUI, 터치스크린, Batch 등
- 프로그램 실행
- I/O 동작 : 파일, 디바이스의 동작
- 파일 시스템 manipulation
- 통신 : local 혹은 외부 네트워크로의 접근
- 에러 검출 : HDD Bad Sector 등
- 시스템 관점
- 자원 할당 : CPU 사이클, 메모리, 파일 등
- Logging : 컴퓨터 자원 및 유저 활동의 추적
- Protection / Security
- 사용자 관점
- User Interface
- CLI ( Command Line Interface )
- 커널 혹은 시스템 프로그램에 의해 동작
- 보안 문제를 방지하기 위해 Linux/Unix의 경우 Command를 별도 실행 파일로 만들어 두고 shell 자체는 최소한의 기능으로 유지
- GUI
- 사용자의 편의 중심
- 대개 마우스, 모니터, 키보드로 구성
- 아이콘이 파일, 프로그램 등을 나타냄
- CLI ( Command Line Interface )
System Call
-
운영체제가 제공하는 일종의 인터페이스
-
보통 C/C++로 작성되며, Win32, POSIX, JVM 등이 있음
-
System Call 실행
- 보통 각 System Call에는 번호가 매겨져 있음
- System Call Interface는 index table로 구성
- 해당 값에 맞는 번호를 전달하여 system call : 시스템 상태와 정해진 값을 return
-
parameter passing
- System Call 시 상세 동작 수행
- ex. file open 시 어떤 파일을 열 것인가?
- 레지스터를 통한 전달 (Table) : 가장 단순한 방법
- CPU 레지스터 크기의 한계 존재
- 메모리 Stack, Queue 사용 : 특정 규약에 따른 parameter passing
- System Call 시 주소와 Call number를 전달
- 주소는 parameter가 저장된 주소를 가리킴
- call number는 해당 system call을 호출
- System Call 시 상세 동작 수행
-
system call의 종류
- 프로세스 생성/삭제
- 종료, 취소
- 불러오기, 실행
- 프로세스 권한 설정
- 대기, signal event
- 메모리 할당 및 해제
- 메모리 오류 시 dump
- 버그 / 명령 실행 시 디버깅
- 공유 자원 접근 시 제한
- 파일 관리
- 생성, 삭제, 열고 닫기, 읽기, 쓰기, 권한 조정
- 디바이스 관리
- 요청, 해제, 읽기, 쓰기, 권한 조정
System Services
- 운영체제의 기능
- 파일 관리 - 생성, 삭제, 복사, 이름 바꾸기 등
- 상태 정보
- 시간, 디스크 용량, 사용자 수
- 로깅, 디버깅 등
- 몇몇 시스템은 레지스트리(설정 정보 저장) 실행
- 프로그래밍 지원 - 컴파일러, 어셈블러, 디버거 등
- 프로그램 로드 및 실행- 로더, 링커 등
- 통신
- 백그라운드 서비스
- 서비스, 서브시스템, 데몬(daemon)으로 유명
- 디스크 점검, 프로세스 스케줄링, 에러 로그 등
- 부팅 시 동작하나 커널이 아닌 유저 레벨의 프로그램
Linkers and Loaders
-
작성된 소스 파일은 컴파일되어 Object 파일로 할당(.o)
-
링커(Linker)는 object 파일을 실행 가능한 파일로 생성
- 소스 코드(.c, .py), 연관된 라이브러리 등을 연결(Link)
- 최근 시스템의 경우 실행 파일에 라이브러리를 링크하지 않음
- DLL(Dynamically Linked Library)
- 과거에는 모든 프로그램에 라이브러리가 링크되어 메모리 효율이 낮음
- DLL을 메모리에 로드하여 복수 프로그램이 같은 라이브러리에 접근 가능
- 이때 라이브러리를 호출할 때만 DLL이 로드됨
- DLL(Dynamically Linked Library)
-
로더는 생성된 실행 파일을 메모리에 이동
- 이 때 pointer 등 할당되는 데이터의 주소 결정
-
소스 프로그램 >> 컴파일러 >> 오브젝트 파일 >> 링커 (+다른 오브젝트 파일) >> 실행 파일 >> 로더 (+DLL) >> 메모리 할당
Why Applications are Operating System Specific
- 컴파일된 프로그램은 특정 OS에서만 동작
- 각 운영체제별로 System Call을 사용하는 방식이 다름
- 다중 OS를 지원하는 경우
- 인터프리터 : 파이썬, 루비 등
- Virtual Machine 내 프로그램 : 자바 등
- OS specific한 원인 - Application Binary Interface (ABI)
- 운영체제 별로 API 구조는 동일
- 함수 실행, 데이터 배치 등의 세부적 구조가 다르기 때문에 OS별로 동작이 다르게 나타남
OS Design and Structure
- OS design
- 설계는 목적과 상세 사항의 정의로 시작
- 사용하는 하드웨어, 시스템 종류 (모바일 등 특정 목적)에 영향
- 사용자 / 시스템 관점을 볼 필요가 있음
- 사용자 관점 : 사용 편의성, 이용 난이도, 속도 등
- 시스템 관점 : 설계 및 구현, 관리 용이성, 오류 신뢰성
- 설계의 분리
- 정책 : 어떠한 작업을 할 것인가
- 동작 : 어떻게 할 것인가
- 수정이 적은 부분과 많은 부분을 분리
- OS의 구현
- 최하단은 assembly (하드웨어 컨트롤)
- 주요 내용은 C로
- 시스템 프로그램은 C/Cpp, 스크립트는 최근 쉘이나 파이썬이 이용되기도 함
- 설계는 목적과 상세 사항의 정의로 시작
- OS Structure
- Unix (Monolithic Kernel)
- 커널 내에 모든 기능 포함(I/O handling, filesystem, CPU schedule 등)
- 빠르지만 복잡함
- Linux (Monolithic + Modular)
- 각 시스템 기능을 각각의 메모리 공간으로 할당
- Layerd approach
- 운영체제를 기능에 따라 층으로 분리
- 낮을수록 HW에, 높을수록 유저층에 가까움
- 자신과 자기보다 하위 층으로만 접근 가능
- 디버깅이 용이(하위 Layer부터 순차적으로 검증)
- User Program이 시스템을 이용할 때 Layer를 거쳐야 하는 만큼 Call 회수가 많아지는 단점 존재
- Microkernel
- Window, Linux 등의 커널 구조와 반대
- Mach가 대표적인 예
- 커널에는 최소한의 기능만 부여하고, 대부분을 유저 기능으로 할당
- 각 기능 간의 통신은 message passing으로 구현
- file system, application, driver 등의 user mode로 구현된 기능들의 message passing(MPI)는 kernel을 통해 전달
- 구현, 디버깅, 관리가 용이
- 속도가 느림 (User-kernel 간 교환의 overhead)
- Unix (Monolithic Kernel)
728x90