Tag Archives: Solaris

Operating Systems, UNIX System V

목적: UNIX 계보 중 UNIX System V의 이해.

번역(翻訳): 방석구

개요(概要)
 본래 AT&T – 정확히는 반독점법 제재로 분할된 AT&T Information System(ATTIS) – 가 개발하여 1983년에 최초로 릴리즈(release)시켰으며, 4개의 주요 버전이 릴리즈 되어있다(Release 1, 2, 3, 4). 그 중에서도 System V Release 4 일명 SVR4는 가장 성공적 버전이자 UNIX에서 보편적으로 사용되고 있는 몇 가지 기능의 기원이기도 하다. 예컨대 시스템의 시작과 shutdown을 제어하는 「SysV init Script」(/etc/init.d) 등이 그러하다. 또한, 이 시스템은 System V Interface Definition(SVID)의 기원이기도 하며, System V의 동작 방식을 정의하기도 한다.

 AT&T도 System V가 동작하는 hardware를 판매하고 있었으나, 대부분의 고객들은 재판업자가 AT&T의 참조 구현체(Reference implementation)를 기반으로 구현한 것을 사용하고 있다. 유명한 System V의 파생품으로는 Dell SVR4와 Bull SVR4가 있다. 지금도 사용되고 있는 System V 기반의 UNIX로써는 IBM의 AIX와 SCO OpenServer가 Release 3를 기반으로 하고 있으며, Sun Microsystems의 Solaris나 SCO(Santa Cruz Operation)의 UnixWare가 System V Release 4를 기반으로 하고 있다. 그 밖에도 NEC의 EWS-UX나 UP-UX와 그 후계 OS인 UX/4800이 System V Release 4를 기반으로 하고 있다.

 System V는 AT&T 최초의 상용 UNIX인 System III를 기반으로 확장되었다. System V는 BSD와 더불어 UNIX의 큰 줄기 중 하나였으나, 현재는 Linux나 ONX 계열의 비약적 확장으로 이러한 얘기는 과거의 것이 되어버렸다. 더불어, POSIX 같은 표준화는 서로 다른 OS간의 격차를 줄이기 위해 이루어졌다.

 UNIX 전쟁시기, BSD는 데스크톱 워크스테이션(Desktop Workstation)을 주축으로 했던 것에 반해, System V는 대규모 멀티 유저를 대상으로 시스템을 구축하려던 기업에 대해서는 최선의 선택이었다.

SVR1
 처음의 System V는 1983년에 릴리즈 되었다. AT&T의 Unix Support Group과 PWB group이 공조한 Unix System Development Labs(USDL)가 System III와 Bell 연구소(Bell Labs) 내에서 사용되던 UNIX/TS 5.0을 기반으로 개발하였다. vi editor나 curses가 BSD로부터 도입되었고, buffer나 inode cache를 추가하여 성능을 향상시켰다. DEC의 VAX와 PDP-11에서 동작했다. 프로세스간의 통신기능으로써 메시지, 세마포어(Semaphore), 공유 메모리가 도입 되었다.

SVR2
 System V Release 2는 1984년에 릴리즈 되었다. Shell 기능과 SVID가 도입되었으며, 새로운 Kernel의 기능으로써, File locking, Paging, Copy-on-write가 도입되었다. Porting base의 개념이 정식화되어 이 릴리즈에서는 DEC VAX 11/780이 선택되었다. Porting base는 소위 참조 구현제(Reference implementation)로써, 다른 플랫폼(Platform)으로의 이식은 이것을 기본으로 이루어졌다. SVR2 Kernel의 상세한 설명은 Maurice J. Bach의 저서 The Design of the UNIX Operation System을 참조. Apple Inc의 A/UX는 이 릴리즈를 기반으로 Macintosh의 Toolbox를 도입했다.

SVR3
 System V Release 3은 1987년에 릴리즈 되었다. STREAMS, Remote File System(RFS), File System Switch(FSS)라고 일컬어지는 일종의 Virtual File System(TLI)을 지원하였다. 최종판은 1988년 Release 3.2로 제닉스(XENIX)와의 호환성이 추가 되었다. SCO Xenix System V/386이 3.2를 기반으로 하고 있다. Porting base로는 AT&T의 3B2 컴퓨터가 선택되었다. IBM의 AIX는 SVR3으로부터 파생된 OS이다.

SVR4
 System V Release 4.0은 1988년 10월 8일 발표되어, 1990년에 릴리즈 되었다. 유닉스 시스템 연구소UNIX Systems Laboratories(USL)와 Sun Microsystems가 공동 개발하였다. 이는 AT&T의 Release 3와 버클리의 4.3BSD(Berkeley Software Distribution), Microsoft의 제닉스(Xenix), Sun Microsystems의 SunOS의 기술을 통합한 것이었다.

  • BSD 기원: TCP/IP 지원, Socket, ufs, 복수 그룹 지원, csh
  • SunOS 기원: Network File System(NFS), Virtual File System 인터페이스(SVR의 File System Switch를 대체), mmap 파일, 새로운 공유 라이브러리, OpenWindows GUI 환경, XDR, ONC RPC
  • XENIX 기원: x86 지향 디바이스 드라이버
  • 그 밖에: ksh, ANSI C 호환, Multi-National Language Support(MNLS), 국제화의 개선, ABI, POSIX, X/Open, SVID3 표준의 지원

 주요한 Platform으로써는 x86과 SPAC 이었다(Porting base로서는 3B2도 존재했다). SPARC 판은 Solaris 2로써 Sun이 릴리즈 했으며, AT&T와 Sun의 관계는 SVR4의 릴리즈까지 계속되었다. 그 후 Solaris는 SVR4.x의 갱신을 따르지 않았다. Sun은 2005년에 Solaris 10의 소스 코드를 오픈 소스(Open source)화하여 OpenSolaris로 릴리즈 하였으나, System V 본래 기능을 오픈 소스화하였기 때문에 대폭적인 수정이 이루어졌다.

 SVR4는 많은 하드웨어 벤더에 채용되었다(HP-UX, IRIX 등).

용어 설명
– 참조 구현체(Reference implementation)
참조 구현체(Reference implementation)는 어떤 기능을 구현한 하드웨어나 소프트웨어에서 타자가 그것을 참고하여 독자적으로 구현할 목적으로 작성된 표준안 같은 것을 말한다.

– 세마포어(Semaphore)
다이크스트라(E.J. Dijkstra)가 제안한 방법으로 반드시 상호 배제(Mutual Exclusion)의 원리가 지켜져야 하는 공유 영역에 대하여 각각의 프로세스들이 접근하기 위하여 사용되는 두 개의 연산 P – 임계 구역(Critical Section) 진입 – 와 V – 임계 구역(Critical Section) 해제 – 라는 연산을 통해서 프로세스 사이의 동기를 유지하고 상호 배제(Mutual Exclusion)의 원리를 보장하는 알고리즘을 말한다.

– SVID
System V interface Definition(SVID, System V 인터페이스 정의서)는 AT&T의 UNIX System V의 동작을 규정한 표준규약이다. 시스템 호출(System call), 표준 C 라이브러리(C standard library), 그 밖의 프로그램이나 디바이스를 규정하고 있다.

– File locking
File locking은 Computer file 접근을 일시적으로 한 명의 유저나 하나의 프로세서로 제한 하는 것으로, 이 locking의 목적은 소위 중재 갱신(interceding update) 시나리오를 방지하는 것이다.

중재 갱신 문제란 예컨대, 프로세스 A 및 프로세스 B가 어느 고객의 구좌 잔고를 가지고 있는 레코드를 file로부터 읽어드려, 각 프로세스가 그 값을 각각의 메모리에 보유하고 있는 상태에서, 다음의 상황이 순차적으로 일어난 경우를 생각해 볼 수 있다.

1. 프로세스 A는 자신이 읽어드린 레코드의 구좌 잔고를 변경하고, 파일에서 해당 레코드 전체를 수정하여 반환한다.
2. 프로세스 B도 동일하게 자신이 보유한 레코드 내의 정보를 변경하고, 파일에서 레코드 전체를 수정하여 반환한다.

프로세스 B가 수정하여 반환한 레코드에는 프로세스 A가 수정한 부분이 전혀 반영되어있지 않으므로, 구좌 잔고는 B에 의해서 덮여 쓰여져 원하는 값을 가질 수 없다.

참고 자료
リファレンス実装
System V Interface Definition
ファイルロック
한빛미디어 – UNIX Systems Programming
홍릉과학출판사 – UNIX SYSTEM ADMINISTRATION HANDBOOK

원문 출처
UNIX System V