본문 바로가기

PROGRAMMING/유닉스 기초

1. 유닉스의 개요 - 역사, 특징, 구조

1) 유닉스가 도대체 무엇입니까?

: 1969년 Bell 연구소에서 개발한 소프트웨어 개발용의 운영체제(OS, Operating System).

초기의 유닉스 운영체제는 어셈블리(Assembly) 언어로 작성되었으나, 같은 연구소의 Dennis Ritchie가 C 언어를 개발한 뒤, 이 언어를 이용하여 유닉스를 다시 만들었다. 그리하여 1973년에 다른 운영체제와는 달리 유닉스는 C언어가 90% 이상이고 나머지가 어셈블리 언어로 작성되어, 고급언어로 작성된 최초의 운영체제가 되었다.

* 운영체제(OS, Operating System) : CPU, RAM, ROM, 모니터 등의 하드웨어를 동작시키고 제어할 수 있는 프로그램. 일반적인 운영체제로는 윈도우, Mac OS, 리눅스 그리고 유닉스가 있음.

* 어셈블리(Assembly) 언어 : 컴퓨터의 기계어를 사람이 기억하기 쉬운 단어로 일대일 대응하여 만들어진 프로그래밍 언어. 컴퓨터가 이해하기는 쉬워도 사람이 기억하기 어려운 저급 언어.


2) 유닉스의 역사 

: 유닉스는 다른 컴퓨터의 시스템 프로그램과는 달리 일반인에게 공개함으로써 미국의 각 대학과 여러 기업체로 널리 퍼지게 되었다. 이렇게 유닉스가 널리 퍼지게 되면서 유닉스에 많은 기능들이 추가되었다. 그리하여 1978년에 UNIX V6(Version 6)라는 이름으로 일반인에게 공개되면서 IBM 370 컴퓨터에 이식하여 시험하였고 다른 많은 회사에서도 자사의 중대형 컴퓨터에 유닉스를 이식하기 시작하였다.

유닉스는 크게 2개의 계보로 발전하였는데, AT&T의 상업용 유닉스로서 SYSTEMV 계열과 학문적 연구 목적인 버클리 대학의 BSD(Berkeley Software Distribution) 계열로 나뉘어 발전하였다. 요즘은 두 가지 계열의 장점들을 결합하여 통합된 형태로 각 회사의 유닉스 운영체제로 사용하고 있다.


3) 유닉스의 특징

① 대화식 운영체제
: 명령어를 입력받기 위해 쉘 프롬프트($)를 화면에 나타난다. 프롬프트가 나타난 상태에서 사용자가 명령을 입력하면 시스템은 그 명령을 수행하고 다시 새로운 명령을 받기 위해 대기하고 있다는 표시로 쉘 프롬프트($)를 나타낸다.


② 다중 작업 기능(multi-tasking)

: 한 번에 하나 이상의 작업을 수행하는 것을 말한다.


③ 다중 사용자 기능

: 여러 대의 단말기(키보드와 모니터)가 하나의 컴퓨터에 연결되어 각 단말기에서 사용자들이 프로그래밍을 하거나 파일 편집을 동시에 수행할 수 있다. 즉, 여러 사람이 동시에 유닉스 시스템을 사용하여 개개의 작업을 수행할 수 있다.


④ 이식성(하드웨어 종류에 상관없이 운영되는 특성)

: 유닉스는 90% 이상이 C 언어로 구현되어 있고, 시스템 프로그램이 모듈화 되어 있어 다른 하드웨어 기종으로의 이식이 용이하다. 즉, 다른 기종으로 이식할 경우 하드웨어에 의존하는 부분인 어셈블리어로 작성된 부분을 새로운 환경으로 변환시키고, C 언어로 구현된 나머지 부분을 재컴파일하여 실행하면 된다.


⑤ 계층적 트리 구조 파일 시스템

: 유닉스는 계층적 트리 구조를 가짐으로써 파일 관리를 용이하게 한다. 


⑥ 개발 도구

: 프로그래머가 여러가지 언어(Fortran, C, C++ 등)를 사용하여 프로그래밍할 수 있도록 많은 컴파일러(compiler)를 제공하고 있다.

컴파일러(compiler) : 명령어 번역 프로그램


⑦ 통신  : 유닉스 시스템은 서로 다른 컴퓨터와 통신 가능하도록 하기 위해 여러 가지의 통신 유틸리티(mail, ftp, telnet 등)를 제공한다.


⑧ 가상 메모리 : 한정된 메모리를 갖는 시스템에서 실제 메모리보다 더 큰 프로그램을 수행하기 위해 가상 메모리(virtual memory) 기법을 사용한다.


4) 유닉스의 구조

: 커널, 쉘 그리고 유틸리티 및 응용프로그램으로 나누어진다.

출처 : 예제 중심의 유닉스 기초, 정일북스, 김병순 저


① 커널 : 유닉스 시스템이 부팅될 때 가장 먼저 읽혀지는 운영체제의 핵심 부분. 메모리 관리, 입출력 장치 관리 등 하드웨어와 관련된 작업을 수행하는 것으로 사용자들은 커널에 접근할 수 없다.


② 쉘(shell) : 명령을 해석하는 부분으로서 사용자와 유닉스 시스템을 연결시켜 준다. 즉, 사용자가 명령을 입력하면 이를 해석하여 커널이 이해할 수 있는 명령으로 번역하여 커널에게 넘겨줌.


출처 : 예제 중심의 유닉스 기초, 정일북스, 김병순 저


③ 유틸리티 및 응용 프로그램 : 유닉스는 많은 프로그래밍 언어를 지원하고, 파일 작성, 파일 출력, 파일 내용을 선택적으로 변경시키는 기능 등과 같은 여러 가지 유틸리티와 다른 컴퓨터와 통신을 가능하게 해주는 여러 가지 응용 프로그램으로 구성된다.