유닉스 운영체제
유닉스 운영체제
- 유닉스는 1969년 Bell 연구소에서 개발된 운영체제로
- 현대 운영체제의 대부분이 UNIX에 뿌리를 두고 있다. (윈도우 제외 거의 모든 OS의 조상님)
특징
-
고급 언어인
C언어로 쓰여있어이식성이 높다.👆 여기서 잠깐!
이식성이란?
한번 만들어진 프로그램을 다른 CPU를 가지는 하드웨어로 쉽게 이식할 수 있다는 뜻입니다.
그렇다면 C언어로 쓰여있으면 왜 이식성이 높을까요?
대다수의 컴퓨터가 C 컴파일러를 가지고 있기 때문입니다.
-
시분할 시스템 (Time Sharing System)을 위해 설계된대화식 운영체제이다.시분할 시스템이란?
현재 대부분의 운영체제가 사용하고 있는 방식으로,
여러 작업을 수행할 때 CPU를 일정한 시간 단위로 분할해 사용한다.
일괄처리에 비해 짧은 응답 시간을 가져 Interative 한 방식이다.
-> 사람이 느끼기에 빠르면서도 자원을 효율적으로 관리하기 위한 방식
대화식 운영체제란?
쉘 프롬프트에 사용자가 명령을 기술하면, 쉘을 통해 시스템에 전달되고
시스템은 정상인지 오류인지 등을 답변하는 방식으로
마치 시스템과 사용자가 대화하는 것과 같은 방식으로 사용된다.
-
다중 사용자,다중 작업(multi-tasking)를 지원한다.👆 여기서 잠깐!
다중 사용자란? 여러 사람이 하나의 컴퓨터에 동시에 접속하는 것을 의미합니다.
다중 작업이란? 한 컴퓨터에서 여러 작업을 동시에 수행하는 것을 의미합니다.
-
파일 시스템이 트리 구조로 구성되어 있다.
유닉스 시스템의 구성

커널 (Kernel)
- 하드웨어를 보호하고 프로그램과 하드웨어 간 인터페이스 역할을 담당한다.
-
프로세스 관리 (CPU 스케줄링),기억장치 관리,파일 관리,입출력 관리,장치 관리등 컴퓨터의 모든 자원을 초기화하고 제어한다. - 응용 프로그램은
system call을 통해 커널에 요청할 수 있다.
쉘 (Shell)
-
사용자의 명령어를 인식해 프로그램을 호출하고 명령을 수행하는 명령어 해석기
-
사용자와 커널 사이의 인터페이스 - 메모리에 적재되어 있지 않고
명령어가 포함된 파일 형태로 존재한다. sh, ash, bash, csh등 다양한 쉘이 존재하며 사용자가 직접 쉘을 만들 수도 있다.- window의
cmd 창, mac의terminal도 쉘의 일종이다.
- window의
유틸리티
- 사용자가 작성한 프로그램을 처리하는데 사용한다.
에디터,컴파일러,인터프리터,디버거등이 있다.
유닉스의 파일 시스템 구조
- 트리 구조의 디렉터리에서 생성됨
- /bin : 대부분의 실행파일
- /usr : 사용자와 관계되는 파일
- /etc : 암호 파일 등 시스템 관리에 필요한 파일들
- /dev : 입출력 장치와 관련된 특수 파일들
- /lib : 프로그래밍 라이브러리들
- /user : 사용자 계정을 위한 디렉터리

-
부트 블록 : 운영체제를 부트(boot) 하거나 초기화하는데 필요한 코드를 담고 있다.
-
슈퍼 블록 : 파일 시스템의 정보 (크기, 개수, 미사용 공간)을 담고 있다.
-
i-node 블록 : 하나의 파일 혹은 디렉토리에 대한 모든 정보를 담고 있다.
(파일 소유자의 사용자번호(UID), 그룹번호(GID), 파일 크기, 파일 타입, 생성시기, 최종변경시기, 최근사용시기, 파일의보호권한, 파일링크수, 데이터가 저장된 블록의 시작주소 등)
-
데이터 블록 : 파일의 실제 데이터가 저장되어 있다.
-
디렉토리 블록 : 파일의 이름과 inode의 번호를 저장한다.
유닉스의 프로세스
데몬 프로세스
- 커널에 의해 실행되며 네트워크의 제어 및 관리 등
시스템을 지원하는 프로세스 - 주기적이고 지속적으로 서비스 요청을 처리하며
백그라운드에서 계속 실행된다. 서버 역할을 하는 프로그램들이 해당되고 보통 이름 뒤에 d를 붙인다.
부모 프로세스 (parent process)
다른 프로세스를 만드는 프로세스로PPID(Parent Prcess ID)를 가진다.- 부팅할 때 실행되는 1번 프로세스를 제외한 프로세스는 모두 부모 프로세스를 가지고 있다.
자식 프로세스 (child process)
부모 프로세스에 의해 만들어지는 프로세스로PID(Process ID)를 가진다.- 할 일이 끝나면 부모 프로세스에 결과를 돌려주고 종료된다.
고아 프로세스 (orphan process)
- 자식 프로세스가 실행중인데 부모 프로세스가 종료되면 자식 프로세스는 고아 프로세스가 된다.
- 이경우 1번 프로세스가 새로운 부모 프로세스가 되어 고아 프로세스가 작업을 마치고 종료될 수 있도록 돕는다.
좀비 프로세스 (zombie process)
- 자식 프로세스가 실행 종료 후에도 프로세스 테이블 목록에 남아있는 경우이다.
- 이경우 부모 프로세스에게 SIGCHILD 시그널을 보내서 부모 프로세스가 자식 프로세스를 정리하게 하거나, 부모 프로세스 자체를 종료시킨다.
프로세스 스케줄링
|
| - 우선순위가 부여된 여러개의 실행 큐가 존재한다.
- 동일한 큐에 배치된 작업들은 Round Robin으로 처리된다.
- 주어진 단위 시간을 다 소모한 프로세스는 우선순위가 낮은 큐로 이동된다.
- 결과적으로 우선순위 Round Robin인 셈이다. |
| ———————————————————— | ———————————————————— |
유닉스의 명령어
| 프로세스 관련 | 파일 및 디렉터리 & 기타관련 |
|---|---|
| fork : 새로운 프로세스를 생성합니다. exec : 새로운 프로세스를 수행합니다. exit : 프로세스 수행을 종료합니다. wait : fork 후 exec에 의해 실행되는 프로세스의 상위 프로세스가 하위 프로세스 종료 등의 event를 기다립니다. kill : 프로세스를 제거합니다. getpid : 자신의 프로세스 아이디를 얻습니다. getppid : 부모 프로세스 아이디를 얻습니다. & : 백그라운드 처리를 위해 명령의 끝에 입력합니다. signal : 신호를 받았을 때 프로세스가 취할 동작을 지정합니다. pipe : 프로세스 간 통신을 위한 경로를 설정합니다. |
create : 파일을 생성합니다. open : 파일을 사용할 수 있는 상태로 준비시킵니다. close : 파일을 닫습니다. cp : 파일을 복사합니다. mv : 파일을 이동시키거나 이름을 변경합니다. rm : 파일을 삭제합니다. cat : 파일 내용을 화면에 표시합니다. chmod : 파일의 보호 모드를 설정하여 파일의 사용 허가를 지정합니다. chown : 소유자를 변경합니다. find : 파일을 찾습니다. mknod : 특수 파일을 생성합니다. mount : 파일 시스템을 마운팅합니다. unmount : 파일 시스템의 마운팅을 해제합니다. mkfs : 파일 시스템을 생성합니다. fsck : 파일 시스템을 검사하고 보수합니다. mkdir : 디렉터리를 생성합니다. chdir : 현재 사용할 디렉터리 위치를 변경합니다. rmdir : 디렉터리를 삭제합니다. ls : 현재 디렉터리 내의 파일 목록을 확인합니다. finger : 사용자 정보를 표시합니다. |
리눅스와 유닉스와 윈도우
| 리눅스 | 유닉스 | 윈도우 |
|---|---|---|
| 일반 사용자부터 개발자까지 다수의 사람들이 사용함 | IBM 사에서 버그 이슈 등을 일괄 관리한다. | Microsoft 사에서 일괄 관리 (UNIX를 계승하지 않음) |
| 오픈소스 OS로 무료임 (유료 버전도 있으나 저렴함) => Ubuntu, RedHat |
대부분 유료임 (Solaris 무료 버전도 있긴함) | 무료판과 유료판이 있음 |
| 모바일폰, 태블릿 컴퓨터, 슈퍼컴퓨터까지 다양한 컴퓨터 하드웨어에 설치가 가능함 | 인터넷서버, 워크스테이션과 PC들에 사용됨. 다수의 금융인프라에 사용됨. |
데스크탑에 쓰이는 OS 중 점유율 탑 |
| 유닉스에서 파생된 운영체제 (유닉스의 아들) | 서버에 특화된 운영체제로 포털이나 대기업 서버에 사용되며 보안성이 뛰어나다. | 낮은 신뢰성이 큰 단점으로, 보안상의 문제가 해결되지 못하고 있다. |
| 대형 컴퓨터를 위해 만들어짐 | PC를 위해 만들어짐 |
우분투 Ubuntu
- 사용 편의성에 초점을 맞춘 리눅스 배포판
- 오픈 소스고, 다양한 언어를 지원하고, 높지 않은 사양의 컴퓨터로 사용 가능하다.
- 사용자가 손쉽게 OS를 설치하고 사용할 수 있도록 설계되었다.
- 시스템 관리 작업에서 sudo 도구를 사용하는게 특징
- APT 관리 도구로 유지보수도 더 쉽고 범용성이 좋다.
macOS
-
오픈 소스와 클로즈드 소스가 동시에 사용됨
-
클래식 매킨토시 운영체제인 Mac OS와 macOS는 아키텍처가 완전히 다른 운영체제
(Mac OS는 장례식 올린지 오래.. )
-
데스크탑 환경에서 MS winodws 다음으로 점유율이 높음
그래서 지금은 어떤 운영체제를 사용하는가?
크게 임베디드 서버 모바일 데스크탑 이렇게 4개 시장으로 나눌 수 있다.
-
임제디드 시장은 자체 제작한 운영체제를 사용하다, 하드웨어 성능이 올라가면서
리눅스계열 커널을 많이 쓴다.-> 리눅스 기반
라즈베리 파이/ 윈도우 임베디드 OS /아두이노/ … -
서버 시장은
유닉스점유율이 1위-> 그 외
리눅스윈도우macOS -
모바일 시장은 리눅스 계열인
안드로이드가 시장 점유율 1위-> 그 외 iOS (유전적 유닉스인 BSD 계열)
-
특이하게도 데스크탑 시장만
윈도우가 시장 점유율 1위
References
- https://velog.io/@ifyouseeksoomi/CS-Operating-System-Unix-Linux-Ubuntu-macOS-windows
-
https://github.com/shinhee-rebecca/2022-cs-study/blob/week2-1/Operating%20System/%EC%9C%A0%EB%8B%89%EC%8A%A4%20%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C.md
- https://core.ewha.ac.kr/publicview/C0101020140307151724641842?vmode=f