공부 학습

운영체제 2주차 - 2

Multitab 2021. 3. 8. 15:25

1. Standard C Library Example

C언어 에서 Printf()을 실행하면 Kernel Mode에서 Write()함수로 System Call이 된다.

2. System Service

  •  System Call와 System Service의 차이점
  • System Call: Kernel이 가지고 있는 서비스
  • System Services(Utilities): OS가 가지고 있는 서비스
  • 프로그램 개발과 실행에 굉장한 편의성을 제공한다
  • File manipulation: 파일 관리를 아주 편리하게!, 상태정보와 언어 컴파일러에 대한 제공!, 프로그램 로딩!, Apllication Program 관리!
  • 대부분의 유저는  실제 System Call말고도 System program까지도 OS의 일환이라고 본다.
  • SystemService가 제공하는 기능은... 파일관리, 상태 정보, 파일 수정, 프로그래밍 언어 지원(Window는 기본적으로 Language surpport없음), 프로그램 로딩, 실행, 백그라운드 서비스, User에 의해 돌아가는 Application Program
  • Deamon:  부팅 때부터 종료때까지 백그라운드에서 돌아가는 프로그램 (윈도우에선 SubSystem이라고 부른다.)

3. Linker와 Loader

  •  Source code가 컴파일 될때 오브젝트 파일이 다른 할당되지 않은 빈 메모리에 할당도어야하기 때문에 Object파일의 주소 값은 절대주소가 아니라 Relocatable한 Object file을 생성한다.
  • 그래서 Linker는 여러 Object file을 하나의 binary file로 통합해주는 것을 Linker라고 한다. 그리고 표준 Library에 대한 함수를 Linker에 넣는 역할을 하기로 한다. (최근에는 Libraray가 여러개이고 Shared Library를 사용하기 때문에 많이 사용되어지는 방식은 아니다.)
  •  그래서 Library함수를 포함한  binary file로 Secondary Memory에 저장해둔다.
  • 그리고 이를 Loader가 이를 실행하여 메모리에서 끄집어내어 필요한 주소를 할당하고 절대주소를 적재하여 계산되게한다.
  • 현대의 컴퓨터는 Libarary를 Linker가 만든 binary file에 포함하는것이 아니라 그때 그때  서로 공유하는 Library가 저장된 주소로 찾아가서 Shared Library 함수를 꺼내오는데 Window에서 이러한 역할을 해주는 Linker만 모아둔 파일이 DLLs(Dynamically linked libraries)파일이다. 
  • 그래서 이러한 실행 파일들은 일정 포맷에 맞추어 제작되어야한다. (같은 CPU를 쓰더라도 OS가 다르면 System Code가 달라진다. 다른 OS에서는 실행이 안될것이다.)

The Role of the Linker and Loader

  • 그래서 어떤 Application이 있을때 그 Application은 다른 OS에서 작동하지 않는다.
  • OS와 상관없이 구동 가능한 프로그램은 대표적으로 Python, JAVA 혹은 Standard Language라고 할수 있는 C언어의 컴파일된 버전은 OS에 상관없이 사용가능하다.
  • 그리고 Application Binary Interface(ABI)라는 구조로 바이너리 수준의 호환성을 제공하여 확장성을 넓히기도 한다.
  • OS 디자인과 구현에 있어서 User의 이상향과 System 개발자의 이상향은 다르다. User은 사용하기 편하여야하고 개발자 입장에서는 디자인하기 쉬워야하고 유지보수하기 편해야 한다.
  • Policy와 Mecanism은 서로 분리되어야 한다. Policy는"무엇을 할것인가"이고 Mechanism은 "어떻게 할것인가"이다. Policy를 시행하기 위한 Mechanism이 여러개 있을수도 있고 Policy 자체도 여러개 있을 수 있다.
  • 그래서 OS Design은 굉장히 창의적인 작업이다.
  • 예시) Policy: CPU사용 시간을 제한한다. => Mechanism: 시간 측정을 위해 타이머를 사용한다.  
  • 현재의 OS 구현에 사용된 언어는 주로 C/C++을 사용하되 한계가 있는 부분은 assembly를 사용한다.
  • 급할때는 Interpret language를 사용 하는 경우에는 가벼운 OS를 구현할때 사용하기도 한다.
  • General purpose OS는 굉장히 커다란 프로그램이다. 여러 OS마다 가벼운 OS도 있고 무거운 OS도 있다.
  • 전통적인 UNIX 시스템에는 System programs과 Kernel로 분리되어 있고 File Management, CPU Scheduling, memory management가 하나의 단층 구조를 이루고 있다.

Traditioanl UNIX System Structure

한편 Linux System Structure의 경우 Monolithic(하나로 단단히 짜여져 있다.)하면서  Modular design을 가지고 있다.

Linux System Structure

모듈화 되어 있되 주변에 연결된 내용이 많아 분리불가능하면서도 모듈단위로 편집하여 수정이 가능하다.

'공부 학습' 카테고리의 다른 글

운영체제 2주차 - 3  (0) 2021.03.09
컴퓨터 네트워크 1주차 - 1  (0) 2021.03.08
운영체제 2주차 - 1  (0) 2021.03.08
운영체제 1주차 - 3  (0) 2021.03.04
시스템 프로그래밍 1주차  (0) 2021.03.03