탄생과 발전 과정
- 1969년 미국의 통신회사인 AT&T 산하의 벨 연구소에서 켄 톰슨과 데니스 리치가 개발
- 처음에는 어셈블리어로 개발했다가 C 언어로 다시 만들어 고급 언어로 작성한 최초의 운영체제가 됨
- 데니스 리치가 연구했던 멀틱스는 당시 복잡하고 거대한 구조 때문에 실패했으나 새로운 유닉스를 만드는 데 지대한 영향을 미침
- 유닉스 개발 얼마 후 소스 코드 공개된 후, 대학교나 기업에서는 이를 이용한 연구를 진행하여 다양한 기능 추가
- 이후 각각 AT&T의 상업용 유닉스(시스템 V)와 버클리대학교의 BSD(Berkeley Software Distribution)로 분리되어 발전
- BSD
- 버클리대학교의 프로그래머들이 상당 부분 수정
- 특히 네트워크 기능 추가한 점은 가장 주목할 만함
- BSD 버전의 유닉스는 HP나 2009년 오라클에 합병된 썬 마이크로시스템즈 등 컴퓨터 제조회사에서 많이 사용
유닉스 운영체제의 구성
- 시분할 시스템과 다수의 프로세스 지원하도록 설계
- 프로세스 하나가 새로운 프로세스를 쉽게 만들 수 있고, 프로세서 스케줄링에는 우선순위 알고리즘을 사용
- 메모리 관리에는 대치 기능이 있는 가변 구역 알고리즘 사용
- 4.2 BSD는 메모리 관리와 프로세서 스케줄링 결정을 보조하는 방법으로 요구 페이징 사용
- 유닉스는 소형컴퓨터용 운영체제의 좋은 본보기, 설계자인 프로그래머의 편리성에 기초하여 운영체제의 크기 작고 이해 용이
- 소프트웨어 개발을 지원하는 운영체제를 개발하고 운영체제 알고리즘을 가능한 단순하게 구성, 단기 목표
- 유틸리티를 서로 결합하여 사용할 수 있도록 설계해서 특정 작업을 수행하는 데 적절한 유틸리티를 선택 가능
- 소규모 모듈로 구성된 유닉스 코드는 단순하고 간결한 구조로 표현했기에 쉽게 익힐 수 있음
유닉스의 설계 원칙
- 유닉스의 장기 설계 목표: 운영체제에서 개발한 응용 프로그램을 기계에 쉽게 이식
- 이식성: 변호나 비용과 하드웨어 변경 때마다 응용 패키지 수정해야하는 번거로움 감소
- 유닉스는 소스를 공개하여 개발자가 기본 시스템을 개발할 때 이를 사용할 수 있게 함
- 이런 개방성은 새로운 가능성과 구현 사항을 만들었을 뿐만 아니라 부족한 사항과 곤란한 문제점을 쉽게 발견할 수 있게 하여 유닉스의 다양화 촉진
- 프로그램에 이상이 생기면 다음 시스템 발표 때까지 기다리지 않고 국부적 수정 가능, 수정 사항을 차기 시스템에도 첨가 가능
유닉스의 특징
- 대화형 시스템: 명령어 기반 사용자 인터페이스
- 다중 사용자 시스템: 여러 사람이 같은 컴퓨터에 동시 접속하여 데이터 사용
- 다중 작업용 시스템: 다중 작업은 컴퓨터 한 대에서 여러 작업 동시 수행
- 높은 이식성과 확장성 제공: 고급 언어인 C 언어로 작성
- 다른 하드웨어로 이식해도 처음부터 다시 개발할 필요 없이 거의 그대로 사용
- 각 기능을 모듈로 나눠 새로운 기능에 필요한 모듈만 추가하면 되므로 편리함
- 계층적 트리 파일 시스템: 계층적인 트리 구조를 사용하여 파일을 관리
- 다양한 부가기능 제공: 운영체제의 기본 기능 외에 프로그래밍 및 디버깅 도구, 문서 편집 도구, 출력 관련 도구 제공, 사용자가 필요한 기능 추가/제거 가능
유닉스의 구조
유닉스 운영체제의 핵심
- 프로세스 관리
- 메모리 관리
- 파일 시스템 관리
- 장치 관리
- 컴퓨터의 모든 자원 초기화
- 제어 기능 수행
커널
- 시스템을 최초로 구동할 때 커널은 메모리에 적재, 메모리에 상주하면서 프로세스 스케줄링과 메모리, 디스크 드라이브, 네트워크 인터페이스 등 하드웨어 자원을 모든 사용자에게 할당, 제어
- 입출력 I/O와 같은 복잡한 기능 대신함
커널의 내부 구조도 - 파일서브시스템
- 메모리, 외부장치에 데이터를 전송하거나 블록 단위로 입출력을 실행할 메모리의 일부를 버퍼로 할당
- 이것을 사용자의 주소 공간과 외부장치 사이에 두는 디스크 캐시 방법으로 파일을 관리함
- 파일 공간 할당, 자유 공간 관리, 파일 접근 제어, 데이터 가져오는 역할을 수행
- 프로세스는 시스템 호출을 하여 파일 서브시스템과 상호작용
- 장치 드라이버는 주변장치를 제어하는 모듈로 다른 시스템을 임의 메모리로 보이게 함
커널의 내부 구조도 - 프로세스 제어 서브시스템
- 프로세스의 동기화와 프로세스 간 통신
- 프로세스 간 메모리 관리
- 프로세스 스케줄링
- 프로세스를 제어하는 시스템 호출에는 fork, exec, exit, wait, signal 등이 있음
셸
- 사용자와 커널 사이의 중간자 역할 담당하는 특별 프로그램
- 사용자가 입력한 명령 해석하여 커널에 인계하면 커널이 명령의 수행 결과 돌려주면 셸은 이것을 다시 사용자가 이해할 수 있는 형태로 변환 출력
- 유닉스에서 셸은 여러 가지, 최초의 셸인 본 셸, C셸, 콘 셸, 배시셸 등 다양
유틸리티와 파일 시스템
- 유닉스는 각종 개발도구, 문서편집 도구, 네트워크 관련 도구 등 다양한 유틸리티 제공
- 유틸리티: 사용자에게 편의를 제공하려고 준비한 시스템 프로그램, 유닉스 기본 명령어로 구성, 사용자가 작성한 응용 프로그램도 유틸리티로 취급
- 계층적으로 구성된 파일 시스템을 사용
- 시스템 파일과 사용자 파일을 체계적 관리