UNIX overview

hyeony·2025년 1월 1일

시스템프로그래밍

목록 보기
1/4

1. Unix

가. History of Unix

1969년, Bell Lab의 Ken Tompson이 PDP-7 위에서 Unix을 최초로 개발하였다. 이후 1976년, 6th version이 개발되었는데, 이는 어셈블리어로 작성되던 기존의 OS와 달리, HW에 의존적인 부분외의 나머지를 C 언어로 개발하여 알고리즘과 자료구조가 간단하고 모듈화된 구조를 지녀 높은 이식성(portability) 을 가지게 되었다. 또한, 소스코드까지 공개되어 널리 확산되는 계기가 되었다.


그렇지만 너무나 많은 Unix의 변종이 생겨났는데, 다양한 버전 간의 호환성을 보장하고, 개발자들이 더욱 일관성 있게 SW를 개발할 수 있도록 OS 인터페이스의 표준화가 요구되었다.

나. UNIX의 표준화

① ANSI C(1989)
- American National Standard Institute
- C언어의 문법, 라이브러리, 헤더 파일의 표준 제정
- 다양한 OS 환경에서 C 프로그램의 호환성을 높이기 위함

② POSIX(1988)
- Portable Operating System Interface for Computer Environments
- OS가 제공해야 하는 서비스를 정의

다. UNIX의 특징

① 장점
- Open System:
개방형 시스템으로, 다양한 플랫폼에서 사용 가능

- Small is Beautiful:
데이터, 디바이스, 소켓, 프로세스 등 다양한 요소를 파일(just stream of bytes)로 취급하여 단순함과 일관성 유지

- Portability:
높은 이식성과 클라이언트-서버 모델, 병렬처리 지원 등으로 여러 환경에서 효과적으로 동작

② 단점
- Too Many Variants:
변종이 너무 많아 통합성과 호환성 문제가 발생 가능

- Not Small and Simple Any More:
초기의 단순함을 잃고 점점 복잡해지고 있음

- Lack of GUI:
초기에는 GUI가 없었으나 MIT의 X Window System 개발로 해결

2. Linux

가. What is Linux?

Linux는 다양한 컴퓨터 환경에서 작동하는 UNIX-like 운영체제이다. 상용 OS와 견줄 수 있을 만큼 성능과 안정성이 뛰어나다. 인터넷 해커 커뮤니티의 기여로 kernel이 개발되고, 전 세계 사용자의 테스트와 피드백으로 지속적으로 개선되었다.

LinuxGNU General Public License(GPL) 하에 배포된다. 실행 파일뿐만 아니라 소스코드가 공개되며, 원하는 사용자는 이를 자유롭게 수정할 수 있다. 단, 수정된 프로그램을 배포할 때는 반드시 소스코드도 공개해야 한다.

나. Why Linux?

Linux의 장점은 다음과 같다.

- 오픈 소스 코드:
사용자가 직접 시스템을 실험하거나 수정 가능

- 풍부한 문서:
FAQ, HOWTO와 같은 문서로 사용자와 개발자에게 풍부한 정보 제공

- 멀티태스킹(Multi-Tasking):
여러 작업을 동시에 실행 가능

- 다중 사용자 접근(Multi-User Access):
여러 사용자가 동시에 시스템에 접근 가능

- POSIX 1003.1 표준 지원:
Unix 기반의 응용 프로그램과 호환성이 높음

- 다양한 파일 시스템 지원:
예) EXT, JFS, ReiserFS, NTFS 등

- 네트워크 프로토콜 지원:
TCP/IP, SLIP, PPP 등 다양한 프로토콜 활용 가능

- 다양한 아키텍처 지원:
x86, SPARC, ARM, PPC 등에서 실행 가능

- 멀티 프로세서(Multi-Processor) 지원:
병렬 처리로 성능 극대화 가능

3. Unix/Linux

가. Unix/Linux 구성


① Application Programs
- user와 상호 작용하며 command 실행(예, ls, mkdir, chmod, vi, sh) 담당

② Library Functions
- Application이 system resources을 효율적으로 활용할 수 있도록 돕는 함수
- 예: printf()는 내부적으로 write() System call을 호출

③ System Calls
- Application과 OS kernel 간의 interface 역할
- kernel 코드 수행

④ Kernel
- 프로세스, 메모리, 파일, I/O 관리 등 시스템 자원의 효율적인 사용 보장

<참고 자료>
- 광운대학교 컴퓨터정보공학부 시스템프로그래밍 강의, 김태석(2020)

profile
Chung-Ang Univ. EEE.

0개의 댓글