유닉스 운영체제
유닉스 운영체제
- 유닉스는 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