도서 기반 내용 정리
목차
- 운영체제 서비스
- 시스템 콜
- 링커와 로더
- 응용 프로그램이 운영체제마다 다른 이유
- 운영체제 디버깅
운영체제 서비스
운영체제는 프로그램과 사용자에게 특정 서비스를 제공한다.
아래 서비스는 프로그래머가 프로그래밍 작어블 더 쉽게 수행할 수 있도록 해준다.
사용자 인터페이스 (User Interface)
- 사용자와 컴퓨터 시스템이 만나는 지점
키보드 타이핑이나 마우스 클릭과 같은 행동으로 사용자는 컴퓨터를 조작할 수 있다. - GUI (Graphical user interface)
- CLI (command-line interface)
- 터치 스크린 인터페이스
프로그램 실행 (program execution)
- 시스템은 프로그램을 메모리에 적재하고 실행할 수 있어야 한다.
- 프로그램이 정상이든 비정상이든 실행을 끝낼 수 있어야 한다.
입출력 연산 (I/O operation)
- 수행중인 프로그램은 입출력을 요구할 수 있다.
- 효율과 보호를 위해, 사용자들이 직접 제어할 수 없고, 운영체제가 입출력 수단을 제공해야 한다.
파일 시스템 조작 (File system manipulation)
- 파일을 읽고, 쓰고, 만들고, 지운다.
- 권한에 따라 파일이나 디렉터리 접근을 허가하거나 거부할 수 있다.
통신 (Communications)
- 한 프로세스가 다른 프로세스와 정보를 교환해야 할 때
공유메모리, 메시지 전달(Message passing)이란 방법을 사용한다.
오류 탐지 (Error detection)
- 운영체제는 모든 가능한 오류를 항상 의식하고, 각 유형에 대해 적당한 조치를 해야 한다.
시스템 자체의 효율적인 동작을 보장하기 위한 운영체제 기능들도 존재한다.
자원 할당 (Resource Allocation)
- 다수의 프로세스나 다수의 작업이 동시 실행시 각각에 자원을 할당해줘야 한다.
- 운영체제는 여러가지 다른 종류의 자원을 관리한다.
기록 작성 (Logging)
- 어떤 프로그램이 어떤 종류의 자원을 얼마나 많이 사용하는지 추적할 수 있어야 한다.
- 사용 통계를 내기 위해 사용된다.
- 컴퓨팅 서비스를 개선하기 위해 귀중한 자료가 될 수 있다.
시스템 콜 (System Calls)
사용자 프로세스가 운영체제로부터 직접 제공받아야 하는 특정 서비스를 해달라고 요청하는 것
시스템콜은 운영체제에 의해 사용 가능한 서비스에 대한 서비스들에 대한 인터페이스를 제공한다.
- 일종의 운영체제의 API라고 생각해라
예제
cp in.txt out.txt
- 위 명령어는 입력 파일을 오픈하고, 출력 파일을 생성 후 오픈한다.
- 사용자 프로그램이 디스크에 있는 파일을 연다는 것은 파일 시스템에 접근한다는 의미
- 시스템에 접근하기 위해선 커널 모드로 전환 되어야 한다.
- 이때 시스템 콜을 사용
응용 프로그래밍 인터페이스 (Application Programming Interface, API)
API는 각 함수에 전달되어야 할 매개변수들과 프로그래머가 기대할 수 있는 반환 값을 포함해 응용 프로그래머가 사용 가능한 함수의 집합을 명시한다.
프로그래머는 운영체제가 제공하는 코드의 라이브러리를 통해 API를 활용한다.
운영체제에 매개변수를 전달하기 위한 3가지 방법
- Call by value : 매개 변수 값 자체를 복사해 CPU 레지스터에 전달
- Call by reference : 값의 메모리 주소를 전달
레지스터 개수보다 더 많은 값을 전달할 때 효율적 - 프로그램을 통해 스택(Stack)에 매개변수를 추가하고, 운영체제를 통해 값을 뺀다.
시스템 콜의 유형
- 프로세스 제어 : end, abort, load 등
- 파일 조작 : create, delete, open, close 등
- 장치 관리 : read, write 등
- 정보 유지 보수
- 통신
- 보호
표준 C 라이브러리
UNIX 및 Linux 시스템을 위한 시스템 콜 인터페이스를 제공한다.
C라이브러리는 printf() 호출을 가로채고 운영체제의 필요한 시스템 콜을 부른다.
아래 예에선 write()가 시스템 콜
링커와 로더 (Linkers and Loaders)
링커
재배치 가능한 오브젝트 파일을 하나의 실행 파일로 결합한다.
로더
이진 실행 파일을 메모리에 적재하는데 사용되며, CPU 코어에서 실행할 수 있는 상태가 된다.
프로그램을 컴파일하고 메모리에 배치하여 사용 가능한 CPU 코어에서 실행할 수 있게 되기까지 절차
- 소스 파일은 임의의 물리 메모리 위치에 적재되도록 설계된 오브젝트 파일로 컴파일 된다.
이러한 형식을 재배치 가능 오브젝트 파일이라고 한다. - 링커는 이러한 오브젝트 파일을 하나의 이진 실행 파일로 결합한다.
- 로더는 실행파일을 메모리에 적재하는데 사용되며, CPU 코어에서 실행할 수 있는 상태가 된다.
프로그램 실행 과정
- Unix 시스템에서 명령어 라인에 프로그램 이름 입력
GUI에선 아이콘 더블 클릭 - fork() 시스템 콜을 사용해 프로그램을 실행하기 위한 새 프로세스 생성
- exec() 시스템 콜로 로더를 호출하고, exec()에 실행 파일 이름을 전달한다.
- 로더는 새로 생성된 프로세스의 주소 공간을 사용해 지정된 프로그램을 메모리에 적재한다.
동적 링킹 라이브러리 (Dynami-cally linked library, DLL)
프로그램이 적재될 때 라이브러리를 동적으로 링크
- 실행 파일에서 사용되지 않을 수 있는 라이브러리를 링크하고, 로드하지 않아도 된다.
- 대신 라이브러리는 조건부로 링크되고, 프로그램 실행 시간에 필요한 경우 적재된다.
응용 프로그램이 운영체제마다 다른 이유
운영체제는 고유한 시스템 콜 집합을 제공한다.
시스템 콜은 어느 정도 같더라도, 다른 장벽으로 인해 응용 프로그램을 다른 운영체제에서 실행하기 어렵다.
동일한 응용 프로그램을 여러 운영체제에서 실행하는 방법
- 응용 프로그램을 운영체제마다 인터프리터가 제공되는 인터프리터 언어로 작성한다.
- 응용 프로그램은 실행 중인 응용프로그램을 포함하는 가상 머신을 가진 언어로 작성될 수 있다. ex) java
- 응용 프로그램 개발자는 컴파일러가 기기 및 운영체제 고유의 이진 파일을 생성하는 표준 언어 또는 API를 사용할 수 있다.
운영체제 디버깅
디버깅
하드웨어와 소프트웨어에서 시스템의 오류를 발견하고 수정하는 행위
병목 현상
두 구성 요소의 최대 성능의 차이로 인해 한 구성 요소가 다른 하드웨어의 잠재 성능을 제한하는 것을 말합니다
- 장애 분석
- 성능 관찰 및 조정
- 추적
- BCC
Modules
모듈은 커널을 확장하기 위한 기술로, OOP에서 말하는 그 모듈화와 같은 개념이다.
프로세스에 실시간으로 모듈을 붙여 작동시키거나, 각 기능들을 독립적으로 관리할 수 있어 효과적으로 시스템을 유지할 수 있다.
'학교 > 운영체제' 카테고리의 다른 글
[운영체제] 4. 스레드와 병행성 (Threads and Concurrency) (0) | 2023.01.18 |
---|---|
[운영체제] 3. 프로세스 관리 (0) | 2023.01.16 |
[운영체제] 1. 서론 (0) | 2023.01.07 |
[OS] 3. Operating System Structures (0) | 2022.05.24 |
[OS] 2-2. Computer Structures (0) | 2022.05.24 |