Search

운영체제 구조

운영체제에서 제공하는 서비스

운영체제에서 제공하는 서비스를 식별할 수 있다
운영체제가 사용자의 편의성을 위해 제공하는 기능
유저 인터페이스(User Interface)
GUI(Graphical User Interface)
CLI(Command Line Interface)
터치스크린
프로그램 실행
시스템은 반드시 메모리에 프로그램을 적재하고, 실행하고, 구동 종료까지 가능하게 하도록 함
I/O 수행
실행 프로그램에 입출력이 필요할 경우 지원
파일시스템 조작
파일 및 디렉토리 읽기/쓰기/생성/삭제 지원. 사용자 권한 관리
통신
동일하거나 다른 컴퓨터 시스템의 프로세스 사이의 통신을 가능하게 함
시스템 자체에 효율적인 동작을 보장하는 기능들
리소스 할당 (자원 할당)
다수개의 사용자 혹은 일을 동시에 처리할 때, 각각의 리소스에게 적당한 할당을 진행
로깅
어떤 프로그램이 얼마나 많은 / 어떤 종류의 컴퓨터 자원을 사용했는지 계속 추적
보호와 보안
다수 사용자나 네트워크 구성된 시스템이 동시 처리시 서로 방해되지 않도록 함

시스템 콜

운영체제 서비스 View
시스템 콜이 운영체제를 두 갈래로 나누고 있다.
운영체제에게 일을 요청하고 싶은데.. 어떻게 요청할까? ⇒ 시스템 콜

듀얼 모드

사용자와 운영체제는 시스템 자원을 공유
사용자와 커널 두 갈래로 나눠진 이유 : 사용자에게 제한을 두어 사용자가 메모리 내의 주요 운영체제 자원에 직접적으로 접근할 수 없도록 함(보안)
운영체제에서 프로그램이 구동되는데 있어, 파일을 읽어오거나, 쓰거나 화면에 메시지를 출력하는 등 많은 부분이 커널모드를 사용
서버에 직접 작업을 해야할 때 사용자가 서버 운영자에게 요청을 한다.
서버 운영자가 아닌 사용자가 서버를 조작하게 되면 문제가 생길 여지가 있다.
사용자가 OS 상에서 실수를 하지 않게 하기 위해서 커널에서 검토 한번 하고 커널 모드에서 수행한 내용을 사용자에게 반환

시스템 콜

응용프로그램에서 운영체제에게 어떠한 기능(시스템 자원)을 수행해달라고 하는 하나의 수단
정의 : 커널 영역의 기능을 사용자 모드가 사용 가능하게 하는 하나의 수단 ⇒ 프로세스가 하드웨어에 접근해서 필요한 기능을 사용할 수 있게 함
C 라이브러리는 시스템 콜을 사용하여 구현이 된다.
cp in.txt out.txt를 타이핑, 엔터!
어떤 상황이 발생하는가?
cp 라는 명령을 받았을 때, input file 명을 받고 output file 명을 받은 후
input file을 열고 output file을 생성
input file을 반복해서 읽은 후 해당 내용을 outputfile에 출력해준다.
input file의 끝에 도달 시, 종료 메세지를 스크린에 띄운 후 정상 종료한다.

시스템 콜 과정

유저모드가 요청(시스템 콜)을 하면 커널 모드 가 해당 시퀀스를 수행 후 리턴된 결과 값을 유저에게 띄워준다.

시스템 콜 유형

프로세스 제어
프로세스 생성, 종료
프로세스 로드, 실행
프로세스 속성 가져오기, 프로세스 속성 설정
Wait 이벤트, Signal 이벤트
메모리 할당 및 해제
파일 관리
파일 생성, 삭제 → rm
파일 열기, 닫기 → cat
파일 읽기, 쓰기, Reposition
파일 속성 값 확인, 지정
장치 관리
장치 요청, 해제
읽기, 쓰기, 재배치
장치 속성 가져오기, 설정
논리적인 장치 연결 및 분리
정보 유지
시스템 날짜 가져오기 및 설정
시스템 데이터 가져오기 및 설정
프로세스, 파일 및 장치 속성 가져오기 및 설정
통신
통신 연결 생성, 삭제
메시지 보내기, 받기
전송상태 정보
원격장치 연결 또는 분리
보호
파일 권한 얻기 및 설정

시스템 서비스

시스템 프로그램프로그램 개발 및 실행에 편리한 환경을 제공합니다.
그들 중 일부는 단순히 시스템 호출에 대한 사용자 인터페이스입니다 ; 다른 것들은 상당히 더 복잡하다
다음과 같이 나눌 수 있습니다.
파일 조작
때때로 파일에 저장되는 상태 정보
프로그래밍 언어 지원
프로그램 로딩 및 실행
커뮤니케이션
백그라운드 서비스 ex) 데몬
응용 프로그램
운영 체제에 대한 대부분의 사용자 관점은 실제 시스템 콜이 아닌 시스템 프로그램에 의해 정의됩니다.

Linkers(링커), Loaders(로더)

링커와 로더
모든 물리적 메모리 위치에 로드되도록 설계된 개체 파일로 컴파일된 소스 코드
재배치 가능한 개체 파일(relocatable object file)
링커는 이들을 단일 바이너리 실행 파일로 결합합니다.
또한 라이브러리를 가져옵니다.
프로그램은 바이너리 실행 파일로 보조 저장소에 상주합니다.
실행하려면 로더에 의해 메모리로 가져와야 합니다.
재배치(relocation)는 프로그램 부분에 최종 주소를 할당, 해당 주소와 일치하도록 프로그램의 코드와 데이터를 조정
최신 범용 시스템(Modern general-purpose systems)은 라이브러리를 실행 파일에 연결하지 않습니다.
동적으로 링크된 라이브러리 - DLL(Windows에서 dynamically linked libraries)는 조건부로 링크되면 프로그램 실행 시간에 필요한 경우 적재됩니다.
오브젝트 파일, 실행 파일은 표준 형식 → 운영 체제는 해당 파일들의 로드 및 시작 방법을 알고 있습니다.
링커와 로더의 역활
링커의 역활 : 미리 만들어져 있는 라이브러리 사용 + 지금 내가 만든 것들
⇒ main 실행파일을 만들건데 math library를 같이 넣어서 만들어줘
로더는 실행파일을 메모리에 올려준다.