1993.1.3

SUBJECT: UNIX의 Kernel

DESCRIPTION:

0. Kernel이란 ?
   * UNIX 시스템 중 항상 주기억 장치(Main Memory)에 상주하는 UNIX의 핵심이다.
   * Kernel은 컴퓨터 작동에 관한한 모든 것을 관리하는 특별한 프로그램이다.
     Kernel은 실행되는 모든 utility를 조화시켜 서로를 방해하지 못하도록 하며,
     시스템의 모든 resource(process, file, I/O device ....)를 관리한다.
   * UNIX의 Kernel은 다른 운영체제에 비해서 비교적 적은 서비스를 제공한다.
   * Kernel 자체는 직접 사용자와 접하는 일이 없고
     모든 일은 Kernel과 사용자 사이에 존재하는 utility program(주로 shell)들을 통해서
     이루어 진다.
   * 초기 UNIX Kernel은 약 10,000줄의 C언어와 1,000줄의 어셈블리어로 되어 있다.

1. Kernel에 의해 제공되는 서비스

   1) Process의 실행에 대한 제어:
      Process의 생성/종료/중지/통신 등,  Process의 실행에 대한 관리
   2) CPU에 의한 실행을 위해 Process들을 공평하게 schedule하는 기능:
      Process들은 시분할 기법에 의해 CPU를 공유하게 된다.
      즉 CPU가 한 Process를 실행할 때 Kernel은 주어진 시간 할당량이 지나면
      그 Process를 중단시키고 다른 Process를 schedule하여 실행한다.
      Kernel은 후에 중단된 Process를 다시 schedule한다.  
   3) 실행 Process룰 위한 주기억 장치의 할당:
      Kernel은 Process들이 그들의 주소 공간 일부를 주어진 조건하에 서로 공유할 수 있게 하지만,
      각 Process의 사유 주소 공간을 외부 간섭으로부터 보호해 준다.
      만약 시스템이 자유 메모리 영역이 모자라면, Kernel은 Process를 임시로 swap장치라 불리는
      보조 기억 장치에 기록함으로써 메모리를 여유있게 만든다.
      만약 Kernel이 '한 Process 전체'를 swap 장치에 기록한다면 
      그 UNIX 시스템의 구현은 "swapping sytem"이 되는 것이고,
      만일 '메모리의 page'를 swap 장치에 기록한다면 "paging system"이라 불리는 것이다.
   4) 화일 시스템 관리:
      사용자 데이타의 효과적인 저장과 검색을 위한 보조기억 장치의 할당을 관리한다.
      Kernel은 보조기억 장치를 사용자 화일에 할당하고, 사용되지 않는 공간을 반납받고
      화일 시스템을 잘 이해될 수 있도록 구성하여 사용자 화일을 불법적인 접근으로부터 보호한다.
   5) 주변 장치에 대한 Process의 접근을 관리:
      터미널, 테이프 드라이브, 디스크 드라이브, 네트웍 디바이스 등의 주변장치를 위한
      device driver라는 module을 가지고 있어 이들 device를 사용하려는 Process의 요구를 관리한다.
   6) 사용자 차원의 Process들이 반드시 제공해야 하는 서비스를 할 수 있도록 지원:
      예를 들어, Kernel은 shell이 command interpreter의 역할을 수행할 때 필요로하는 서비스를
      제공한다.  keybord 입력을 읽는 기능, Process의 동적 생성, Process실행의 동기화,
      파이프의 생성, 입출력 재지정 등의 기능을 의미한다.  
   7) System Call의 제공:
      사용자 프로그램이나 라이브러리에 의해 building-block으로 사용되는
      system call을 제공한다.
   8) Interrut의 처리




Revision History
Created       on Jan. 3 ,1993