3장. UNIX의 구조 |
UNIX의 중요한 부분인
커널을 하드웨어와 OS사이의 인터페이스 역할을 하는 것으로서 시스템 프로그램
계층이라 한다. 커널의 두 가지 주된 일은 다중 프로그래밍과 다중 태스킹을
위한 프로세스 관리와 파일 및 입출력장치의 관리이다. UNIX 커널이 기본적으로
제공하는 기능들은 다음과 같다. 일반 PC의 입장에서 보면 BIOS로 보면 무난하다.
부팅을 하였을 경우에 시스템의 첫 번째 블록이나 둘째 블록에 걸쳐 저장되어 있는 아주 짧은 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)
boot block ☞ super block ☞ i-nodes ☞ file& directory check ☞ UNIX kernel ☞ I/O buffers check ☞ user space 성립 ☞ getty동작 ☞ 사용자 id입력되면 passwd확인 ☞ 사용자 작업공간 성립.
이 작업은 /etc/init.d
라는 디렉토리에 있는 파일들이 자동 실행되는데 여기에 있는 파일들은 /etc/rc0.d
∼ /etc/rc3.d 디렉토리에 있는 script형식의 파일들과 링크 되어 있다.
시스템의 정지를 위해서 필요한 작업은 전원을 끄기 전에 모든 사용자의 프로세스를 정지시킨 후 메모리의 I/O buffer에 존재하는 파일 블록들을 디스크에 save하는 일이다. 이때 사용되는 명령어는 sync이며 최종적으로 shutdown시킨 후 전원을 끈다. shutdown을 시키면 1분 안에 시스템이 종료될 것이라는 broadcast 메시지가 현재 로그인 되어 있는 사용자에게 전달되어 진다. 그래서 접속된 사용자의 수가 적다면 who명령어로 접속자를 파악한 뒤 finger명령어로 현재 사용중인 process를 파악하여 종료될 것이라는 것을 통보해주어야 한다. 모든 UNIX 파일 시스템은 5개의 주요부분으로 되어 있다. 파일시스템의 첫 번째 블록을 포함하는 몇 개의 블록에는 부트블록이 저장된다. 이곳을 제외한 나머지 부분은 실린더 그룹이라 부르는 여러 개의 실린더 그룹으로 나누어 관리한다. 한 개의 실린더 그룹은 수퍼블록, 실린더 그룹블록, i-node데이블 및 데이터 블록으로 구성된다. (1) 부트블록
(2) 수퍼블록
(3) 실린더
그룹 블록
(4) i-node
테이블
(5) 데이터
블록
UNIX의 특징중
하나인 링크구조는 편리한 구조인데, 파일이 링크 되면 파일의 내용은 복사되지
않고 그 파일의 i-node number와 파일이름만 현재의 디렉토리에 등록된다. UNIX에서의
링크된것의 삭제의 의미는 링크된것까지 모든 것의 삭제를 의미한다.
그리고 디렉토리를 생성시키면 '.' 와 '..'가 생기는데, '.'는 '..'의 i-node에
대한 것으로서 상위 디렉토리 i-node에서 파생된 것이다. 그러므로 'cd ..'을
했을 때 상위디렉토리로 이동하는 것이다.
|