프로그래밍[Univ]/운영체제

[OS] OS service / structure / Debugging

Cloud Travel 2012. 3. 20. 17:29
* Operating System Service

 

 ※ GUI(in user interface)는 OS의 자체 시스템이 될 수도 있다.(OS마다 지원 방식이 다르다.)
 ⓐ User Service
  - Program execution(프로그램 실행)
   > 프로그램을 메모리에 적재하여 실행하고, 프로그램을 정상 또는 비장상 적으로 끝내는 역할을 담당한다.
  - I/O Operation(입출력 동작) 
  - File System(파일 시스템 조작)
   > 파일을 정확히 읽고, 쓰며 파일 이름으로 파일을 생성 및 삭제가 가능해야한다.
  - Communication(통신)
   > 프로세스간 통신을 원활하게 해줘야 한다.
  - Error Detection(오류 검사)
   > 운영체제는 가능한 모든 오류를 검사하여 알려줘야 한다.
 ⓑ System Service
  - Resource allocation(자원 할당)
   > 다수의 프로세스에 얼만큼 어느 자원을 분배할지 OS가 관리(Management)해줘야 한다.
  - Accounting(계정)
   > 사용자마다의 시스템 사용 통계를 수집하고 보관한다. 이 정보는 연구자에게 귀중한 자료이다.
  - Security & Protection
 
* System call
 - User space와 Kernel Space를 연결해주는 매개체 역할로 OS의 service를 사용가능 하게 해준다. 
 - 프로그램 작성시 개발자가 직접 System call을 명령하는 것이 아니라 API를 통해서 한다.
 - API(Application programming Interface)  
  > User programs과 System call의 중간단계로 사용이 쉬워지고, 이동성/호환성을 높여준다.
  > 대표적 API로 Win32(MS), POSIX(Linux/Unix), JAVA(JVM)등이 존재한다.
 - System call에 Parameter(매개 변수)를 전달해주는 방법(사용자와 OS가 공동으로 관리 가능한 공간을 이용)
  ⓐ Register를 이용한다.
   > Register가 작기 때문에 저장가능한 파라미터 크기가 제한적이다.
  ⓑ Memory를 이용한다.
   > 메모리에 파라미터의 정보를 저장하고, 주소만 register에서 관리한다.
  ⓒ Stack을 사용한다.
   > Stack의 LIFO를 이용하여 파라미터를 전달해준다.
   > Stack에 정보를 저장하고, stack의 위치는 register에 저장한다.


* Operating System structure
 ⓐ Simple Structure / ex. MS-DOS
  - 하나의 프로세스만 실행이 가능하다.
  - 프로그램을 실행하면(메모리에 올리면), Kernel의 메모리를 제외하고는 최소한의 크기만 차지하고,
    프로세스를 실행한다.
    


   > Kernel의 memory는 Process를 실행해도 고정되있다.
   > Command interpreter(명령 번역기)는 최소한의 부분만 유지하고 줄어든다.
   > Process가 차지할 만큼의 메모리를 차지하고 남는 메모리가 Free memory이다.
  - 위와 같은 실행 방식을 따른 것은 Memory가 적기 때문에 프로세스 슬행시 필요 없는 Memory를 정리하여
     메모리를 최대한 사용하기 위해서 이다.
  - 계층 구조
   

   > 계층구조가 되어있지만, 인터페이스와 기능에 대한 계층이 분리 되지 않았다.
   > 프로그램이 ROM BIOS device에 접근이 가능하여 오류를 낼 수 있다.
   > dual mode가 지원 되지 않는다.(이때에는 dual mode 개념이 존재하지 않았다.)
 ⓑ Limited structure / ex. 초기 UNIX
  - 커널과 시스템 프로그램 두 부분으로 구성 되있다.
   > System Program / Kernel
  - Kernel 또한 OS가 실행하는 기능들이 하나로 뭉쳐 있다.
   > Unix라는 프로그램이 하나의 프로그램으로, 하나를 수정하게 되면 전부 다시 컴파일 해줘야 한다.
   > 기능들이 하나로 뭉쳐있어서 Performance는 향상되게 된다.
   > 이러한 구조를 단일 커널 구조(Monolithic kernel structure)라고한다.
  ※ 현재는 여러인터페이스와 장치드라이버로 분할되있다.
 ⓒ Layered Structure
  - Hardware(layer 0)을 시작으로 여러 계층으로 기능을 나눠서 관리하는 것.
   > 각각의 레이어는 자신이 할 기능 만을 수행하므로서, 다른 계층을 support해주는 형식이다.
   > 레이어간 정보 이동 및 sharing은 불가능하다.
  - Layer의 순서를 정하기 힘들고 덜 효과적이라 사용되지 않는다. 
 ⓓ Modules(계층 구조의 발전형태)
  - Module을 나눠서 개발하고, Interface를 통해 직접 연결한다.
  - 필요할때마다 Loading하여 사용하면 된다.
  - 유연하다.  
 ⓔ Micro-kernel System Structure
  - 커널의 기능을 User space로 이동시킴
  - User space와 kernel space간의 message 전달로 큰 오버헤드(overhead)가 발생한다.
  - 장점
   > 운영체제가 제공하는 서비스를 사용자 영역의 독립적인 장소(서버)에서 수행하기 때문에 서버에서
      잘못 실행되도 다른 사용자에게 치명적인 영향을 주지 않는다.(안전성 향상) 
   > 운영체제의 많은 기능이 사용자 영역의 서버로 구현 가능하게 되어서
     서버의 개발이 용이하고 운영체제의 기능을 확장하기 쉽다. 
  - 단점 
   > 위에서 말했듯이 큰 오버헤드발생으로 사용이 적다.
 ⓕ Virtual Machines
  - Hardware를 가상으로 공유하여, 실제 OS를 사용하는 듯한 착각을 유발한다.
  - Virtual Machine간의 통신이 불가능하여, 각각의 프로그램을 각각의 VM에서 실행하는 기술의 연구가 활발하다
  - 프로그램 테스트가 용의하다.
  - VM간 메모리는 빌려 줄 수 있다. 
    


* Operating System Debugging
 - Core dump : Application error시 메모리 정보를 파일로 저장
 - Crash dump : OS가 깨질때의 메모리 정보를 파일로 저장