본문 바로가기

Operating System/Linux

Ⅰ 유닉스, 리눅스

 

 

ls
gedit - 아스키코드만 저장, 코드작성 주로 여기서 수행

디렉터리 내용 보는 것(파일), 터미널, 편집기 gedit을 주로 쓸 것

 

리눅스 유닉스 모두 GNU 재단에서 만든 것이고

양측이 동일하므로

리눅스를 쓸 수 있으면 유닉스도 쓸 수 있다.

 

유닉스를 pc에 포팅해서 만든 게 리눅스이므로 사용법이 거의 동일하다.

 

Minix 라는 운영체제를 리눅스 토발즈가 pc에 포팅했다.

그래서 사용법을 유닉스와 동일하게 만들었다.

또한, Minix는 내부구조가 유닉스와 비슷하다.

특히, 사용자계열의 소프트웨어들, 전부다 유닉스와 동일하게 사용한다.

그래서 유닉스와 같은 것이다.

 

유닉스라고 하는 거는 리눅스라고 여러분들이 알고 있으면 됩니다.

 

 

 

유닉스/리눅스 운영체제

- 1970년대 초에 AT&T 벨연구소에서 개발된 이후로 지속적으로 발전
- 스마트폰, PC, 서버 시스템, 슈퍼컴퓨터에까지 사용되고 있음
- 소프트웨어 경쟁력의 핵심이 되고 있다.
 

유닉스/리눅스 기반 운영체제

1. 안드로이드(Android) OS

2. iOS

3. 맥(Mac) OS X

4. 리눅스(Linux)

5. BSD 유닉스(Unix)

6. 시스템 V

7. Sun 솔라리스(Solaris)

8. IBM AIX

9. HP HP-UX

10. Cray 유니코스(Unicos)

 

 

유닉스에서 보급언어로 발전시키기위해 만들어진 언어가 C언어이고,
그래서 유닉스와 리눅스에서는 C언어가 가장 기본적으로 사용된다.

 

 

그 당시 컴퓨터는 IBM이라는 회사가 독점하고 있었다.

유닉스는 소스를 무료로 공개했다.

그래서 운영체제 이론이 급격하게 발전하게 됐고

폐쇄적이던 IBM이 유닉스에 밀리게 되고 소프트웨어적 설비는 유닉스가 더 발전하게 된다. 

 

유닉스/리눅스 기반 운영체제 OS, iOS는 스마트폰에 사용하는 운영체제

Cray는 슈퍼컴퓨터로, 슈퍼컴퓨터의 운영체제로도 쓰이고 있다.

요즘 모든 운영체제는 전부 유닉스체제.

그렇다고 IBM을 안 쓰는 것은 X

IBM 기반 운영체제는 자기들의 대형 컴퓨터에 사용한다. 

 

 

★ 프로세스와 파일

유닉스는 기본적으로 2가지 기본 철학이 있다.

1. Process

2. File

 

이 개념을 잘 이해해야 유닉스, 리눅스를 잘 이해할 수 있다.

프로세스 프로그램을 실행하는 가상적인 개념이다.

물리적으로 보면, 프로그램을 실행하는 것 = CPU 그것은 Processor라고 부른다.

물리적 실체가 있는 것

그런데, 실제 내부적으로 동작하는 물리적 실체는 CPU 하나 뿐이다. 따라서, 그 내부의 일을 하는 동적인 과정을 명명하기 위해 Process라는 개념을 이용하게 되었다. 

프로세스가 동작하다 필요하면 사용하게 되는 자원에 해당하는 것이 File이다.

모든 자원은 File이고 실제 동작을 하는 것은 Process다.

단순한 두 가지이지만, 시스템을 이해하기에는 매우 효율적이다.

 

키보드나 마우스, 네트워크 장치까지도 모두 File이라고 한다.

모니터 화면에 어떤 것을 보여주기 위해서도 Write를 사용한다. 대상만 다를 뿐이다.

그래서 프로세스가 봤을 때는 두 개다 똑같은 파일이다. 그런데 파일의 종류가 다르다일 뿐이다.

따라서 모두 파일로 통칭한다. (유닉스, 리눅스에서는.)

 

 

 

유닉스의 설계 철학

단순성

- MIT MULTICS에 반대해서 최소한의 기능만 제공

- 자원에 대한 일관된 관점 제공

 

이식성

- 이식성을 위해 C 언어로 작성

- 다양한 플랫폼에 이식 가능

- 스마트폰, PC, 서버, 슈퍼컴퓨터 등

 

개방성

- 소스 코드 공개와 같은 개방성

 

 

 

 

유닉스의 특징

다중 사용자, 다중 프로세스 

- 여러 사용자가 동시에 사용 가능

- 여러 프로그램이 동시에 실행

- 관리자 슈퍼유저가 있음.

 

쉘과 대화식 운영체제

- 명령어 해석기 쉘 사용

- 명령어나 유틸리티 등을 사용하여 쉘 스크립트 작성

 

 

계층적 파일 시스템

- 트리와 같은 디렉터리 계층구조

(유닉스가 나오기 전까지 IBM은 제공하지 않았던 기능으로,

유닉스가 처음에 이런 방식을 제공하는 것은 그당시 획기적이었다.)

  • 루트가 있고 그 밑에 폴더, 다른 파일들이 있으면서 계층적 구조를 갖추는 효율적 방식을 제시
 

 

훌륭한 네트워킹

- 유닉스에서부터 네트워킹이 시작

- ftp, telnet, WWW, X-window 등

이또한 유닉스에서 최초로 만들어진 시스템이다.

 

 

 

1.2 유닉스 시스템 구조

유닉스 운영체제 구조

운영체제

- 컴퓨터의 하드웨어 자원을 운영 관리하고
- 프로그램을 실행할 수 있는 환경을 제공.
 

커널(kernel)

- 운영체제의 핵심으로 하드웨어 운영 및 관리
 

시스템 호출(system call)

- 커널이 제공하는 서비스에 대한

  프로그래밍 인터페이스 역할

 

쉘(shell)

- 사용자와 운영체제 사이의 인터페이스
- 사용자로부터 명령어를 입력 받아

  해석하여 수행해주는 명령어 해석기

 

 

내부에 커널이 있고 쉘, 라이브러리 등을 다 포함하고 있다.

함수 이름들이 쭉 나열되어 있는 것이다. (시스템 호출) 시스템 콜 함수라고 한다.

터미널 창에서 실행되고 있는 프로그램이 쉘이다. (윈도우즈의 경우 명령프롬프트가 일종의 쉘)

그 밖에 여러 응용프로그램들이 있다. (데이터베이스 등의 응용프로그램들이 RAM 바깥에 있다.)

 

모든 하드웨어 CPU는 두 가지 동작 모드를 제공한다.

CPU 동작모드가 최소한 두 가지가 있다. 하나는 첫 번째가 커널모드, 두 번째가 사용자 모드가 있다.

커널 모드는 보통의 운영체제에서는 슈퍼바이저/특권 모드라고 명명한다.

CPU가 커널모드에 있을 때는 모든 명령코드들을 다 실행할 수 있다.

그러나, CPU가 유저 모드로 동작할 때는 특권 모드가 제공한 일반적인 명령어들만 사용할 수 있다.

특권 명령은 주로 '하드웨어를 건드리는 명령어'들이다. 따라서 시스템을 깨뜨릴 수도 있다.

그런데 보통 유저모드의 명령어들은 시스템을 죽이지 않는다.

윈도우즈는 요즘 개선이 되었지만 얼마 잘못 사용하면 시스템이 죽는 경우가 있었다. 

그러나 유닉스나 리눅스는 그런 일이 절대 없다.

CPU 동작 모드를 잘 활용해서 만들었기 때문에.

 

 

 

 

커널

커널의 역할

- 하드웨어를 운영 관리하여

- 프로세스, 파일, 메모리, 통신, 주변장치 등을 관리하는 서비스를 제공한다.

 

 

 

주로 하드웨어를 운영하고 관리한다.

더 넓은 개념으로는 시스템 자원을 관리한다.

CPU, 메모리, 디스크, 주변장치들 등등인데

자세한 사항은 운영체제에서 다룰 문제이고,

일단 여러개의 프로그램들이 적당하게 메모리를 달리하면서 나누어 주어야 한다.

이런 내용들은 모두 운영체제에서 다룰 내용들이다.

 

 

 

1.3 유닉스 역사 및 버전

 

그 다음에 역사는 빨리 넘어간다.

상식적으로 알아둘 만한 것은

유닉스의 큰 흐름 - BSD, 리눅스

버클리대학에서 운영하고 있는 소프트웨어를 배포하는 업무 담당 - BSD

리눅스는 BSD쪽에서 나왔을 것.

BSD는 아직까진 무료.

대부분 무료로 제공되고 있는 건 BSD 개념에서 발전된 것들이다. 

 

복잡한 것들이 모두 Unix에서 시작됐다.

 

 

유닉스 역사 및 표준

AT&T 벨 연구소(Bell Lab)에서 개발됨

- Ken Thompson이 어셈블리어로 개발함

- D. Ritchie가 C 언어로 다시 작성함

  • C 언어는 Unix를 작성하기 위한 언어로 밀접하게 관련되어 있음

- 이론적으로 C 컴파일러만 있으면 이식 가능

- 소스 코드를 대학에 개방함

 

 

 

유닉스의 큰 흐름

- 시스템 V(System V)
- BSD(Berkeley Standard Distribution) 유닉스
- 리눅스(Linux)
 

 

 

유닉스 버전 트리

 

 

 

 

BSD 유닉스

공개 소스코드를 기반으로 버클리대학교에서 개선

- 지속적으로 발전하여 BSD 4.3 버전이 개발됨

 

주요 기능 개선

- 메모리 관리 기능 향상

- 네트워킹 기능 추가

  • TCP/IP 네트워킹, 소켓(Socket) 등  

 

 

상업용 운영체제의 기초

- 썬 OS(Sun OS), 맥 OS(Mac OS) 등

 

 

 

리눅스

PC를 위한 효율적인 유닉스 시스템

- 1991년 헬싱키 대학의 Linus Torvalds에 의해 개발됨
 

소스코드가 공개

- 인터넷 상에서 자원자들에 의해서 기능 추가 및 확장됨
- 공용 도메인 상의 무료 OS

 

 

다양한 하드웨어 플랫폼에 포팅 가능

- PC, 워크스테이션, 서버, 메인프레임 등
- 놀라운 성능 및 안정성

 

 

GNU 소프트웨어와 함께 배포

- GNU/Linux 운영체제
- 다양한 응용 프로그램

 

 

GNU

GNU is Not Unix의 약자

자기를 말할 때 자기 이름이 들어가 있다.

이런 걸 재귀적인 표현방법이라고 표현한다.

이런 표현 방법이 많이 있다. 

 

GNU측에서는 그냥 유닉스라고 말하면 아주 싫어한다.

GNU 유닉스라고 불러줘야 한다.

 

GNU는 MIT 교수였던 스톨만이 만들었다.

소프트웨어는 무료로 줘야 하는 것 아니냐,

학교를 그만두고 나와서 GNU를 만들었다.

FSF라는 단체에서 소프트웨어를 개발해서 무료로 배포했다. 

 

사실, 윈도우즈/리눅스/유닉스에서 사용하는 모든 소프트웨어들이

GNU 버전이 있다. 그래서 모두 무료로 사용할 수 있다. 

 

대표적인 것이 썬 시스템의 운영체제도 있고,

맥 OS 애플의 운영체제도 있고

모두 유닉스에서 물려받은 것이다.

 

우리가 지금은 윈도우즈라고 부르지만 기존에는 MS도스라고 했다.

 

컴퓨터에서 쓰는 모든 명령어창은 유닉스에서 이어졌다고 볼 수 있다.

 

 

애초에 유닉스나 리눅스는 멀티 유저용으로, 여러 사람이 동시에 쓰는 것이다.

여러 사람이 들어와서 쓸 수 있다.

그렇다면, 시스템을 관리하는 사용자가 한 명 필요하고, 그 사용자를 슈퍼유저라고 한다.

 

 

슈퍼 유저

슈퍼유저(superuser)

- 시스템을 관리할 수 있는 사용자로

- 슈퍼유저가 사용하는 계정이 root이다

 

sudo 명령어 사용

$ sudo 명령어

$ sudo apt install gcc       # gcc 컴파일러 설치 (GNU에서 제공하는 C Compiler라는 의미)

$ sudo passwd root       # root 패스워드 설정

 

슈퍼유저 로그인

- 직접 root 계정으로 로그인

- 다른 계정으로 로그인 후

 

  $ su

  암호:

 

  임시적으로 root 유저를 사용한다. '루트의 권한으로 뒤에 주어진 명령어 실행하기'라고 보면 된다.

 

실제 시스템 내부적으로는 이름으로 관리하는 게 아니고, 사용자 번호가 따로 있다.

 

URL에서 hs.ac.kr 우리 사이트를 나타내는 것처럼, 

 

그런데 실제 통신시에는 IP주소로 변환되어 패킷에 실려간다.
203.252.20.8

 

 

접근권한을 판단하거나 할 때는 각 사용자마다 문호가 있는 것이다.

루트는 번호가 0번으로 딱 고정되어 있다.
사용자 ID라고 보통 말한다.