3장. UNIX의 구조
     

    3.1 커널 개요 

    UNIX의 중요한 부분인 커널을 하드웨어와 OS사이의 인터페이스 역할을 하는 것으로서 시스템 프로그램 계층이라 한다. 커널의 두 가지 주된 일은 다중 프로그래밍과 다중 태스킹을 위한 프로세스 관리와 파일 및 입출력장치의 관리이다. UNIX 커널이 기본적으로 제공하는 기능들은 다음과 같다. 일반 PC의 입장에서 보면 BIOS로 보면 무난하다.  
    프로세스 관리, 파일관리, 장치관리, 가상 메모리 관리,네트워킹, 네트워킹 파일 시스템,  다중 처리기의 지원기능 

    3.2 커널의 부팅과 종료 

     부팅을 하였을 경우에 시스템의 첫 번째 블록이나 둘째 블록에 걸쳐 저장되어 있는 아주 짧은 built-in 프로그램이 메모리로 읽혀 들어온다. 이것은 일종의 loader 프로그램으로써 커널 프로그램인 /unix 또는 /root/unix를 메모리로 로드하여 실행을 시작한다. 커널이 제일 먼저하는 일은 하드웨어 인터페이스 장치들에 대한 초기화 작업이다.   

    커널은 각 구동기의 초기화 루틴을 차례로 실행하여 어떤 주변장치가 사용가능한가를 결정한다. 그리고 각종 I/O buffer들을 초기화한다. 커널이 직접 만든 첫 번째 프로세스를 process 0 이라 부르는데 process1이 만들어진 후에 swapper가 된다. swapper는 프로세스를 스케쥴링하는 기능을 행한다. process1은 시스템의 다중사용자 작업을 관리하는 프로그램인 /etc/init를 실행하고, process2는 pagedaemon이라는 paging-out 프로그램을 실행한다. 여기서 process id를 알아내는 명령어는 ps 인데, solaris 2.5에서는 ps -A이다. 미리 예약된 pid(process id)는 pid 0=swapper, pid1=init, pid2=page daemon이다. 이외의 process id는 사용자가 실행할 프로그램에 대해서 환경파일에서 정해줄수도 있으며, 임의로 시스템이 정해줄수도 있다. 보다 정확한 의미로 말하자면 나머지 process는 /fork/exec 호출방식에 의하여 호출된다.   

    init프로세스를 조상으로 하는 커널의 프로세스 tree구조를 표시한다. init 프로세스는 시스템 콘솔에 shell 프로세스를 가동시키고 super-user의 특권을 부여할 수 있는데, 이것을 single-user mode라고 부른다. 이 single-user mode에서는 콘솔이 루트특권을 갖고 자동적으로 login되며, 다른 통신선들은 login을 받아들이지 않는다. single-user mode는 보통 파일 시스템을 점검, 보수하거나 시스템의 기본적인 테스트를 하는 경우에 사용되어진다. init 프로세스는 multi-user프로세스 구조를 만들 수 있다. init는 활성화되어 있는 단말통신선들에 getty 프로세스를 생성시킴으로서 multi-user 환경을 조성한다. init또한 shell 프로세스를 생성시켜서 start-up 커맨드 파일인 /etc/rc를 실행한다. rc(run commands)   
    script는 보통 파일시스템의 mount, daemon 프로세스들의 시동, 임시 파일들의 삭제, 작업 회계프로그램들의 시동 등의 커맨드들을 포함한다.   
    getty 프로세스는 직렬단말 통신선에 login  프로그램을 실행하여 passwd를 검사하고 login이 성립되면 shell을 수행케 한다. 
      
    부팅이 성립되기 까지 블록의 이동을 보면 다음순서와 같다.  

    boot block ☞ super block ☞ i-nodes ☞ file& directory check ☞ UNIX kernel ☞ I/O buffers check ☞ user space 성립 ☞ getty동작 ☞ 사용자 id입력되면 passwd확인 ☞ 사용자 작업공간 성립. 

      
     UNIX의 시스템이 부팅할 때 user space성립 후 System ready 라는 메시지를 볼 수 있을 것이다. 하지만 이전에 DOS에서 보아왔던 Autoexec.bat 파일의 작용을 하는 부분이 UNIX또한 있다. 아니 다시말 하면 UNIX의 이런 기능을 DOS에 적용한 것이라고도 볼 수 있다.   

     이 작업은 /etc/init.d 라는 디렉토리에 있는 파일들이 자동 실행되는데 여기에 있는 파일들은 /etc/rc0.d ∼ /etc/rc3.d 디렉토리에 있는 script형식의 파일들과 링크 되어 있다.    
    이것의 의미는 /etc/rc0.d ∼ /etc/rc3.d 안에 있는 script 형식의 파일이 무엇을 어떻게 실행시켜야 할 것인가를 묘사해주고 있다. 그리고 실제 실행되는 파일은 /etc/init.d 에 위치해 있다.   

     시스템의 정지를 위해서 필요한 작업은 전원을 끄기 전에 모든 사용자의 프로세스를 정지시킨 후 메모리의 I/O buffer에 존재하는 파일 블록들을 디스크에 save하는 일이다. 이때 사용되는 명령어는 sync이며 최종적으로 shutdown시킨 후 전원을 끈다. shutdown을 시키면 1분 안에 시스템이 종료될 것이라는 broadcast 메시지가 현재 로그인 되어 있는 사용자에게 전달되어 진다. 그래서 접속된 사용자의 수가 적다면 who명령어로 접속자를 파악한 뒤 finger명령어로 현재 사용중인 process를 파악하여 종료될 것이라는 것을 통보해주어야 한다. 

    3.3 UNIX 파일 시스템의 구조 

     모든 UNIX 파일 시스템은 5개의 주요부분으로 되어 있다. 파일시스템의 첫 번째 블록을 포함하는 몇 개의 블록에는 부트블록이 저장된다. 이곳을 제외한 나머지 부분은 실린더 그룹이라 부르는 여러 개의 실린더 그룹으로 나누어 관리한다. 한 개의 실린더 그룹은 수퍼블록, 실린더 그룹블록, i-node데이블 및 데이터 블록으로 구성된다. 

    (1) 부트블록 
    : 부트스트랩에 필요한 파일들이 존재하며 루트영역외에는 해당되지 않는다. 즉 일반사용자 들에게는 해당되지 않는 블록이다. 

    (2) 수퍼블록 
    : 파일 시스템의 크기, i-node 테이블의 크기, free 블록리스트 등 파일시스템을 관리하는 데 필수적인 정보가 저장된다. 

    (3) 실린더 그룹 블록 
    : 실린더 그룹내의 유효 블록들의 비트 맵 정보나 통계 정보를 기록한다. 

    (4) i-node 테이블 
    : 파일에 대한 중요한 정보를 싣는데 즉, 파일에 대한 크기, 데이터위치(디스크주소), 파일유형, 사용허가권, 생성날짜등이 기록되는 커널의 파일관리에 있어서 핵심이 되는 모든 자료를 기록한다. 만약 한 파일이 생성된다면 그 파일은 파일명을 가짐과 동시에 i-node number를 가지고서 해당 디렉토리 파일에 저장되기 때문에 디렉토리에서 파일명으로 손쉽게 i-node를 찾아 파일의 위치정보를 알아낼 수 있다. 

    (5) 데이터 블록 
    : 실제 데이터가 저장되는 공간이다. 

    3.4 디렉토리 파일의 구조 

     UNIX의 특징중 하나인 링크구조는 편리한 구조인데, 파일이 링크 되면 파일의 내용은 복사되지 않고 그 파일의 i-node number와 파일이름만 현재의 디렉토리에 등록된다. UNIX에서의 링크된것의 삭제의 의미는 링크된것까지 모든 것의 삭제를 의미한다.  그리고 디렉토리를 생성시키면 '.' 와 '..'가 생기는데, '.'는 '..'의 i-node에 대한 것으로서 상위 디렉토리 i-node에서 파생된 것이다. 그러므로 'cd ..'을 했을 때 상위디렉토리로 이동하는 것이다.   
    이를 확인하기 위해서는 명령어 프롬프트에서 'ls- l'을 쳐보면 나오게 된다. 
     
     

 


[ HOME ][ PREV ][ NEXT ]