12 OS - 유닉스
12 OS - 유닉스
1. 유닉스의 탄생과 구성
1. 유닉스의 설계원칙
- 유닉스는 시분할 시스템과 다중 프로세스를 지원하도록 설계
- 소형 컴퓨터용 운영체제의 모범 사례로, 설계자(프로그래머)의 편의성을 중시하여 운영체제 크기가 작고 구조가 단순함.
- 대부분의 알고리즘은 속도나 복잡성보다는 단순성에 초점을 맞춤
2. 유닉스의특징
- 대화형 시스템: 사용자가 입력한 명령에 실시간으로 응답함.
- 다중 사용자 시스템: 여러 사용자가 동시에 시스템을 사용할 수 있음.
- 다중 작업용 시스템: 여러 프로세스를 동시에 실행할 수 있음
- 높은 이식성과 확장성: 다양한 하드웨어에 쉽게 적용하고 기능을 확장할 수 있음
- 계층적 트리 파일 시스템: 모든 파일이 트리 구조로 구성
- 다양한 부가 기능 제공: 풍부한 명령어와 도구로 자동화와 조합이 가능
3. 커널
- 커널은 유닉스 운영체제의 핵심
- 프로세스 관리, 메모리 관리, 파일 시스템, 장치 제어 등 시스템 자원을 초기화하고 제어
- 응용 프로그램은 시스템 호출(System Call)을 통해 커널에 기능을 요청함
- 커널의 구성
- 파일서브시스템 : 메모리 일부를 버퍼로 활용해 디스크 캐시 방식으로 파일을 관리함
- 프로세서 제어 서브시스템 : 프로세스 동기화, 프로세스 간 통신, 메모리 보호, 스케줄링 및 디스패칭 등을 담당
4. 셀
- 사용자의 명령을 해석하고 커널에 전달하는 중간자 역할
- 사용자가 입력한 명령을 문자열로 해석하여 커널의 시스템 호출로 변환함
2. 유닉스의 프로세스의 관리
1. 유닉스 프로세스의 종류
- 사용자 프로세스: 일반 사용자가 실행하는 애플리케이션 프로세스.
- 커널 프로세스: 커널 내부에서 동작하며 시스템 자원을 관리하는 프로세스.
- 데몬 프로세스: 백그라운드에서 실행되며 시스템 서비스를 제공하는 프로세스
2. 유닉스 프로세스의 상태
- 생성(new): 프로세스가 막 생성된 상태.
- 준비(ready): 실행 가능하지만 CPU를 아직 할당받지 못한 상태.
- 실행(running): CPU를 할당받아 명령을 수행 중인 상태.
- 대기(waiting): 입출력 등 외부 이벤트를 기다리는 상태.
- 종료(terminated): 실행이 끝나거나 종료 명령으로 소멸된 상태.
- 좀비(zombie): 종료되었지만 부모 프로세스가 아직 수거하지 않은 상태.
3. 유닉스 프로세스의 구조
- 상주 테이블
- 프로세스 테이블: 각 프로세스의 상태, PID, 우선순위 등 정보를 저장.
- 텍스트 테이블: 실행 코드(텍스트 영역)의 공유 여부, 위치 등을 관리.
- 사용자 영역
- 사용자 프로그램의 코드, 데이터, 스택 등이 위치하며 프로세스마다 독립적.
- 시스템 데이터 구조
- 파일 디스크립터, 커널 스택, 페이지 테이블 등 시스템이 관리하는 구조로 커널 영역에 위치.
4. 유닉스 프로세스의 스케줄링
- 시분할 방식을 기반으로 하며 각 프로세스에 일정 시간씩 CPU를 할당.
- 선점형(Preemptive) 방식으로 높은 우선순위가 낮은 우선순위 프로세스를 중단 가능.
- 프로세스마다 우선순위(priority)가 존재하며, 커널이 이를 기준으로 스케줄링.
- 실행 준비 큐(run queue)를 사용해 준비 상태인 프로세스를 관리.
- CPU 사용 시간을 공정하게 분배하고 시스템 반응 속도를 유지하도록 설계됨.
3. 시스템 호출 인터페이스
1. 파일조작
- 파일 입출력은 시스템 호출을 통해 커널이 직접 처리함.
- 시스템 호출을 통해 파일 디스크립터를 받고, 이를 기반으로 모든 조작이 이뤄짐
- 주요 호출
- open(): 파일 열기
- read(): 파일에서 데이터 읽기
- write(): 파일에 데이터 쓰기
- close(): 파일 닫기
- lseek(): 파일 포인터 위치 변경
- stat(): 파일 정보 조회
2. 프로세스 제어
- 프로세스 생성, 실행, 종료 등도 커널의 제어하에 이루어짐
- 유닉스는 fork()와 exec() 조합을 통해 새로운 프로그램 실행을 분리함.
- 주요 호출
- fork(): 현재 프로세스를 복제하여 자식 프로세스 생성
- exec(): 새로운 프로그램을 현재 프로세스에 적재하여 실행
- wait(): 자식 프로세스의 종료를 대기
- exit(): 프로세스 종료
- getpid(), getppid(): 현재/부모 프로세스 ID 조회
3. 시그널
- 시그널은 프로세스 간 또는 커널과 프로세스 간의 비동기 이벤트 전달 수단
- 시그널은 예외 처리, 타이머, IPC(프로세스 간 통신) 등에 다양하게 사용됨
- 주요 호출
- kill(pid, sig): 특정 프로세스에 시그널 전송
- signal(sig, handler): 시그널 처리 함수 등록
- alarm(seconds): 특정 시간 후 시그널 발생 예약
- pause(): 시그널 수신 대기
- 대표 시그널
- SIGINT: 인터럽트(Ctrl+C)
- SIGKILL: 강제 종료
- SIGCHLD: 자식 종료 알림
4. 유닉스의 메모리관리
1. 유닉스의 메모리 관리 개요
- 유닉스는 가상 메모리(Virtual Memory) 기반으로 동작하며, 각 프로세스에 고립된 주소 공간을 제공함.
- 메모리는 크게 커널 공간과 사용자 공간으로 나눔
- 사용자 공간에는 코드 영역(텍스트), 데이터 영역, 힙, 스택이 포함
- 커널은 메모리 보호, 할당, 회수, 스와핑 등을 담당하며, malloc()과 같은 호출은 내부적으로 커널 메모리 관리 루틴을 이용함.
2. 대치
- 시스템 메모리가 부족할 때 일시적으로 프로세스를 디스크로 내보내는 기법이다.
- 오래 사용하지 않은 프로세스의 메모리 내용을 보조 저장장치(스왑 공간)에 저장하고, 필요한 시점에 다시 메모리로 불러옴.
- 대치 대상 선택은 페이지 교체 알고리즘(예: LRU, FIFO 등)을 통해 결정함.
- 대치는 시스템 반응성을 유지하면서 동시에 많은 프로세스를 실행하기 위한 핵심 기술.
3. 페이징
- 가상 메모리를 동일한 크기의 페이지로 분할하고, 실제 물리 메모리도 프레임 단위로 관리하는 기법
- 페이지와 프레임은 보통 4KB 같은 고정 크기로 일치
- 페이지 테이블이 가상 주소와 물리 주소 간의 매핑 정보를 저장
- 필요한 페이지가 메모리에 없을 경우 페이지 폴트(page fault)가 발생하고, 디스크에서 해당 페이지를 불러옴
- 페이징을 통해 프로세스는 연속된 주소 공간처럼 동작하지만 실제 물리 메모리는 단편화 없이 효율적으로 사용함.
5. 유닉스의 파일시스템
1. 디스크 블록의 구조
- 유닉스 파일 시스템은 디스크를 고정 크기의 블록 단위로 나눠 사용한다.
- 블록의 종류
- 부트 블록: 부팅에 필요한 코드 저장
- 슈퍼블록: 파일 시스템의 전체 정보(크기, 사용량 등) 저장
- 아이노드 블록: 파일 메타데이터(i-node) 저장
- 데이터 블록: 실제 파일 데이터 저장
2. 유닉스에서 연속 파일 할당
- 유닉스는 연속 할당 방식보다 블록 연결 방식(비연속)을 주로 사용
- 파일은 디스크 내 여러 위치에 분산된 블록으로 저장됨
- 아이노드는 각 블록의 주소 포인터를 통해 파일을 구성함
3. i 노드의 할당과 반납
- i-node는 파일의 메타데이터(파일 크기, 소유자, 권한, 블록 주소 등)를 저장하는 구조체
- 파일 생성 시 새로운 i-node가 할당되고, 삭제 시 반납됨
- 각 i-node는 고유 번호를 가지며, 파일명은 디렉터리에서 i-node 번호와 연결된다
- 데이터 블록의 위치는 i-node에 포함된 포인터들이 관리함
4. 유닉스의 디렉터리
- 디렉터리는 파일 이름과 i-node 번호를 매핑하는 특수한 파일
- 파일 시스템은 디렉터리를 통해 파일명을 해석하고 해당 i-node를 찾아간다
- 계층적 구조로 트리 형태를 가지며, 경로 탐색에 사용됨
5. 유닉스의 시스템 파일 테이블
- 프로세스가 파일을 열면, 커널은 해당 정보를 시스템 전체 파일 테이블에 저장
- 각 프로세스는 자신의 파일 디스크립터 테이블을 통해 시스템 테이블을 참조
- 테이블 항목에는 파일 위치, 접근 모드, 참조 횟수 등의 정보가 있음
- 여러 프로세스가 하나의 파일을 열면 같은 시스템 테이블 항목을 공유
6. 유닉스의 디스크 구조
- 디스크는 일반적으로 다음과 같은 구조를 가짐
- 부트 블록
- 슈퍼블록
- i-node 영역
- 데이터 블록 영역
- 이러한 구조는 파일 시스템의 빠른 탐색과 관리 효율성을 높임
- 유닉스는 이러한 영역을 고정된 순서와 규칙에 따라 나누어 저장
This post is licensed under CC BY 4.0 by the author.