BSD Overview
OSXDEV
Mac OS X 커널의 BSD 부분은 주로 FreeBSD(4.4BSD 버젼으로 향상된 네트워킹, 성능, 보안, 그리고 호환성의 특징이 제공됨)로부터 파생되었다. BSD 변종들은 일반적으로 버클리 대학의 Computer Systems Research Group(CSRG)의 4.4BSD-Lite Release 2로부터 파생되었다. BSD는 많은 다음을 포함하는 많은 향상된 기능을 제공한다.
- 동적으로 우선순위 조정이 가능한 선점화된 멀티태스킹. 무리한 작업이 걸리는 상황에서도 어플리케이션과 사용자 간의 부드럽고 공정한 컴퓨터 자원의 공유가 보장된다.
- 많은 사람들이 다양한 작업을 위해서 Mac OS X 시스템을 동시에 사용할 수 있다. 예를 들어, 이것은 프린터나 디스크 드라이브 같은 시스템의 주변장치가 시스템이나 네트워크의 모든 사용자들 간에 올바르게 공유될 수 있고, 각각의 자원 제한이 사용자나 사용자 그룹에 대해 놓임으로써 중요한 시스템 자원이 남용되는 것을 방지할 수 있다.
- SLIP, PPP, NFS 같은 산업표준에 대한 지원을 포함한 강력한 TCP/IP 네트워킹. Mac OS X는 NFS(원격 파일 접근), email 서비스, 또는 HTTP, FTP, 라우팅, 그리고 방화벽(보안) 서비스와 같은 인터넷 서비스와 같은 중요한 기능을 제공함으로써, 엔터프라이즈 서버와 같은 다른 시스템과 쉽게 상호작용이 가능하다.
- 메모리 보호. 어플리케이션은 각각에 대해 서로의 영역을 침범할 수 없다. 어떤 어플리케이션의 충돌은 어떻게든 다른 어플리케이션에 영향을 주지 않는다.
- 가상 메모리와 동적인 메모리 할당. 메모리를 많이 사용하는 어플리케이션은 사용자의 응답에 대한 반응을 유지하는 동안에도 충분하다. Mac OS X의 가상 메모리 시스템으로, 각각의 어플리케이션은 자기 자신의 4GB 메모리 주소 공간에 접근할 수 있다. 이것은 메모리를 적게 사용하는 어플리케이션에도 동일하다.
- Mach 쓰레드에 기반한 커널 쓰레드 지원. 사용자 레벨의 쓰레드 패키지는 커널 쓰레드의 최상단에서 구현된다. 각각의 커널 쓰레드는 독립적으로 스케쥴되는 실재(entity)이다. 하나의 사용자 프로세스로부터의 하나의 쓰레드가 시스템 콜에서 block 되면, 같은 프로세스로부터 다른 쓰레드가 그 프로세서나 다른 프로세서에서 실행을 계속 한다. 기본적으로, 전통적인 개념의 프로세스에서는 main 쓰레드인 하나의 쓰레드를 갖고 있다. 사용자 프로세스는 다른 사용자 쓰레드를 생성하기 위해 POSIX 쓰레드 API를 사용할 수 있다.
- SMP 지원. 여러개의 CPU를 갖고있는 컴퓨터에 대한 지원이 포함되었다.
- 소스 코드. 소스가 포함되어 있기 때문에, 개발자는 BSD 프로그래밍 환경에 대해서 최상의 단계의 제어가 가능하다.
- 많은 POSIX API
[편집] BSD 기능들
사용자 프로세스에서 사용 가능한 기능들은 논리적으로 2가지로 구별된다. 커널 기능과 시스템 기능으로써 서버 프로세스와 협력하여 구현된다.
커널에 구현된 기능은 각각의 프로세스가 실행되는 가상 머신(virtual machine)으로 정의된다. 많은 실제의 머신과 마찬가지로, 이 가상 머신은 메모리 관리와 인터럽트 처리, 타이머와 카운터 기능을 갖고 있다.
가상 머신은 descriptor를 통해 파일과 다른 오브젝트에 대한 접근을 허용한다. 각각의 descriptor는 디바이스 컨트롤러와 비슷하고 해당 연산에 필요하다. 실제 머신에서의 디바이스처럼, 이들 중 일부는 머신의 내부에 있고, 일부는 외부에 있다. descriptor 장치의 일부는 운영체제 내부에 만들어져 있고, 다른 부분은 서버 프로세스에 구현되어 있기도 하다.
BSD 컴포넌트는 다음과 같은 커널 기능을 제공한다:
- 프로세스와 보호
- host 와 프로세스의 식별
- 프로세스 생성과 종료
- user 와 group ID
- 프로세스 그룹
- 메모리 관리
- text, data, stack, and dynamic 공유 라이브러리
- page 맵핑
- page 보호 제어
- POSIX synchronization primitives
- POSIX shared memory
- signals
- signal types
- signal handlers
- signal 보내기
- timing and statistics
- real time
- interval time
- descriptors
- files
- pipes
- sockets
- resource controls
- 프로세스 우선순위
- 자원의 사용과 제한
- quotas (용량 제한)
- system operation support
- bootstrap 작업
- shut-down 작업
- accounting (계정 작업)
BSD 시스템 기능 (사용자 영역과 상호작용하게 되는 기능) 은 다음을 포함한다.
- 읽고 쓰기와 nonblocking, 비동기 처리와 같은 일반적인 입력/출력 작업
- 파일 시스템 작업 (file-system operations)
- 프로세스간 통신 (interprocess communication)
- 터미널과 다른 장치의 처리 (handling of terminals and other devices)
- 프로세스 제어 (process control)
- 네트워크 작업 (networking operations)
[편집] Mac OS X 와 BSD 간의 차이점
Mac OS X의 BSD 부분은 주로 FreeBSD로부터 가져왔지만, 일부는 다음과 같이 변경되었다:
- 메모리 관리를 위한 sbrk() 시스템 콜이 deprecated 되었다. Mac OS X 에서 이것의 사용은 추천되지 않는다.
- Mac OS X 런타임 모델은 실행파일과 공유 오브젝트에 다른 오브젝트 파일 포맷을 사용한다. 그리고 이러한 실행파일의 일부를 실행하는데 다른 작동방식을 사용한다.
기본 네이티브 포맷이 Mach-O 이다. 이 포맷은 dynamic link editor (dyld)를 통해 지원된다.
PEF 바이너리 파일 포맷이 Code Fragment Manager (CFM)를 통해 지원된다.
커널이 Mach-O 바이너리에서 execve() 사용을 지원한다. Mach-O 동적 공유 라이브러리의 맵핑과 관리는 PEF 기반의 응용프로그램을 포함하여 사용자 영역의 코드로써 수행된다.
- Mac OS X는 mmap() 함수를 통한 메모리 맵핑된 디바이스를 지원하지 않는다. (그래픽 장치 지원과 그밖의 하위시스템은 비슷한 기능을 지원한다, 그러나 다른 API를 사용한다.) Mac OS X에서, 이 인터페이스는 사용자 클라이언트를 통해 완료되어야 한다. 더 많은 정보가 필요하면 Apple I/O Kit 문서를 보기 바란다.
- swapon() 호출이 지원되지 않는다, Mach 페이저로부터 macx_swapon() 호출을 사용한다.
- Mac OS X의 통합된 버퍼 캐쉬 구현은 FreeBSD에서의 것과 다르다.
- Mach는 전통적으로 UNIX에는 없는 몇 개의 IPC 기본 요소를 제공한다. Mach IPC에 대해 더 많은 정보가 필요하면 “Boundary Crossings”를 보기 바란다. System V 기본 요소의 일부가 지원이 되나, POSIX 쪽의 기능을 사용하는 것이 좋다.
- 소유권과 권한을 볼륨(volume) 기준으로 비활성화 시키는 것을 포함하여 단일 사용자와 다중 관리자 설정을 지원하기 위해, BSD 보안 모델에서 몇가지 변화가 있다.
- 커널에서 사용되는 locking 메커니즘이 FreeBSD에서 사용되는 메커니즘과 상당히 다르다.
- Mac OS X에서 사용되는 kernel extension 메커니즘은 완전히 다른 것이다. Mac OS X의 드라이버 계층인 I/O Kit은 C++ 로 쓰여진 객체 지향적인 드라이버 계층이다. 일반적인 커널 프로그래밍 인터페이스나 KPI는 드라이버 커널 extension 이 아닌 것으로 만들어 진다. 이러한 메커니즘은 각각 "I/O 오버뷰"와 KPI 레퍼런스에서 더 자세히 다룬다.
추가적으로, Mac OS X (Darwin)의 BSD 구현에 특징적인 몇가지 새로운 기능이 추가되었다. 이 기능들은 FreeBSD에는 없는 것들이다.
- 향상된 파일 시스템 버퍼 캐쉬와 파일 I/O 클러스터링(clustering)
- 적응적이고 추리적인 미리 읽기(read ahead)
- 사용자 프로세스 제어적인 미리 읽기(read ahead)
- 파일 시스템 버퍼 캐쉬의 시간 조정(time aging)
- 향상된 파일 시스템 지원
- ISO-9660 파일 시스템에 대한 Apple 확장 구현
- NFS를 위한 다중쓰레드된 비동기 I/O
- Mac OS Extended (HFS+) 파일 시스템 문법(semantics) 지원을 위한 추가적인 시스템 콜
- 경로 이름을 위한 이름짓기 관례(naming convensions) 추가, 다양한 Mac OS Extended 파일 시스템의 분기(forks)에 접근하기 위해 필요함.
[편집] 더 읽을 거리들
Mac OS X 커널의 BSD 부분은 복잡하다. 완전한 설명은 이 문서의 범위를 벗어나는 것이다. 그러나 이 부분에 대한 많은 훌륭한 참고자료가 존재한다. 만약 BSD에 관심이 있다면, 더 많은 정보를 위해 "참고 자료"를 찾아보기 바란다.
Mac OS X의 BSD 계층이 4.4BSD로부터 파생되었지만, 4.4BSD와 동일하지 않다는 것을 명심하기 바란다. 4.4BSD 기능중에 몇가지는 Mac OS X에 포함되지 않았다. 그리고 몇가지 새로운 기능이 포함되었다. 더 많은 정보를 위해 인용된 참고 자료들을 읽어보기를 추천한다. 그러나 그 자료들이 정확하게 Mac OS X에 대해서 설명하고 있다고 받아들여서는 안된다.




