본문 바로가기

CS BASIC/정보시스템 일반

[CS BASIC] 운영체제의 핵심 구성 요소와 명령어 해석기

개요

오늘은 운영체제의 핵심 구성요소에 대해서 알아보고,

다양한 운영체제에서 컴퓨터에게 내리는 명렁어를 처리하는 ‘명령어 해석기’에 대해서 알아보겠습니다.

 

일반적으로 사람들이 사용하는 다양한 전자 기기는 궁극적으로는 모두 ‘컴퓨터’의 일종이라고 할 수 있습니다.

컴퓨터는 1945년 폰 노이만이 설계한 기본적인 설계를 바탕으로 하여 다양한 분야에서 다양한 방식으로 확장 및 발전되어 갔습니다.

 

컴퓨터의 구조, 컴퓨터 아키텍처에 대한 보다 자세한 설명은 아래의 포스팅을 참조해주세요.

https://1-hee.tistory.com/97

 

[CS BASIC] 클라우드 컴퓨팅(Cloud Computing) 기술과 데브옵스(Devops)

오늘은 프로그래머라면 한 번쯤은 들어봤을 클라우드 컴퓨팅(Cloud Computing) 기술과 데브옵스(Devops)에 대해서 간단히 알아보도록 하겠습니다. 컴퓨터(Computer)란? 클라우드 컴퓨팅 기술에 대해서 알

1-hee.tistory.com

 

이에 대한 예시로, 각종 문서 작업이나 프로그램을 사용하기 위해 사용하는 개인 PC부터

지인과 연락하기 위한 수단으로 스마트폰을 사용할 때, 카페나 식당에서 맛있는 음식을 사먹기 위해 방문할 때도

우리는 일상 속에서 다양한 형태의 컴퓨터와 함께 살아가고 있습니다.

 

이러한 컴퓨터는 발전된 하드웨어 기술에 따라 그 성능이 시간이 갈수록 좋아지고 있지만,

그럼에도 불구하고 컴퓨터의 자원은 한정적이기 때문에 이를 효율적으로 관리해야 하고

이를 위하여 각 컴퓨터에는 자원 관리를 위한 전용 프로그램, 즉 운영체제(OS, Operating System)가 존재합니다.

 

그리고 이러한 운영체제는 크게 운영체제, 쉘(shell), 커널(Kernel)의 세가지로 나눌 수 있는데요.

컴퓨터 내에서 운영체제와 그 핵심 구성요소를 그림으로 도식화하면 아래와 같습니다.

 

 

fig 1.0 운영체제의 구성 요소


쉘(shell)이란?

운영 체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램

 

운영체제에서 컴퓨터로 하여금 어떤 프로그램이 명령한 작업(task)를 수행하는 것은 커널(Kernel)에 의해서 이루어 집니다.

그리고 이러한 커널은 이러한 중요성 때문에 컴퓨터의 핵심이라고도 불리는데요.

 

하지만, 컴퓨터에게 어떤 명령을 내리기 위해 커널을 직접 조작하는 일은 개발자와 같은 전문가가 아닌 이상 무척 어려운 작업이고

사용자료 하여금 복잡한 명령어를 통해 프로그램을 사용하라고 한다면 이토록 널리 소프트웨어가 보급되지도 못했을 것입니다.

 

즉, 운영체제에서 쉘(shell)은 컴퓨터에게 사람이 내리는 명령을 수행할 수 있도록 사람의 언어를 컴퓨터의 언어로 변환될 수 있도록 도와주는 역할을 맡습니다.


쉘의 유형

오늘날 컴퓨터에서 사용 가능한 쉘은 아래와 같이 그  종류가 다양합니다. 

이름 경로(Path) FreeBSD 8.0 Linux 3.2.0 Mac OS X 10.6.8 Solaris 10
Bourne shell /bin/sh  . . copy of bash .
Bourne-again
shell (bash)
 /bin/bash optional  . . .
C shell /bin/csh link to tsch optional . .
Korn shell /bin/ksh opțional opțional . .
TENEX C shell /bin/tcsh  . optional . .

 

쉘(shell)은 대부분 OS와 관련이 깊어서 어떤 쉘을 사용하는지 알고 있다면 대강 OS도 유추할 수도 있습니다.

이중에서도 오늘날에 자주 사용하는 대표적인 쉘 3가지에 대해서 더 알아보도록 하겠습니다.

 

1) Bourne Shell (sh)

- Bourne Shell(sh)은 UNIX shell의 기본(Original) 입니다.

- 오늘날의 쉘들은 여기서 발전해 나갔고, 일반 유저는 $ 프롬포트를, root 유저는 # 프롬포트를 사용합니다.

 

2) Bourne-again shell (bash, 배쉬)

- 리눅스의 표준 쉘입니다.

- 우분투와 페도라도 배쉬 쉘을 사용합니다.

- bash 쉘은 Bourne Shell (sh) 쉘을 기반으로 하여 만들어졌습니다.

- GNU 프로젝트를 위해 개발되었습니다.

 

*GNU 프로젝트란?

- 자유로운 소프트웨어를 지향하기 위한 프로젝

- GNU 프로젝트는 리처드 스톨먼의 주도하에 시작된 공개 소프트웨어 프로젝트이다.

- 1983년 9월 27일 유즈넷 net.unix-wizard 그룹을 통해 일반에 알려졌다.

 

https://ko.wikipedia.org/wiki/GNU_%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8

 

 

3) zsh(Z쉘)

-  Bourne-again shell (bash)와 마찬가지로 Bourne Shell (sh) 의 확장된 버전입니다.

- 자동 cd ( 디렉토리 이름을 입력하세요 )를 지원합니다.

- 재귀 경로 확장 기능이 있습니다. 예를 들어 /u/lo/b 경로는 /usr/local/bin 으로 확장됩니다.

- 철자 교정 및 자동완성 기능을 지원힙니다. 디렉토리 경로에서 약간의 실수는 수정해줍니다.

- 플러그인 및 테마를 지원합니다.  zsh는 자체적으로 다양한 플러그인 미 프레임 워크가 포함되어 있습니다.

- 맥에서는 카탈리나 이후부터 기본 쉘을 zsh로 바뀌었습니다.


커널(kernel)이란?

컴퓨터 과학에서 커널은 컴퓨터 운영 체제의 핵심이 되는 컴퓨터 프로그램으로, 시스템의 모든 것을 완전히 제어.
운영 체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 가지 서비스를 제공

 

 

커널의 역할(Kernel’s role)

앞선 설명에서 커널은 운영체제에서 ‘핵심’ 역할을 한다고 소개드렸습니다.

커널은 운영체제에서도 가장 깊은 곳에 위치하는 핵심을 구성하는 요소로서 그 역할은 다음과 같습니다.

 

1) 보안

  • 커널은 컴퓨터 하드웨어에서 프로세스를 보호하기 위한 보안 기능을 책임지고 있습니다.

 

2) 자원 관리

  • 한정된 시스템 자원을 효율적으로 관리하여 프로그램 실행을 원활하게 합니다. 
  • 특히 프로세스에 처리기를 할당하는 것을 스케줄링이라는 작업을 담당합니다.

 

3) 추상화

  • 같은 종류의 부품에 대해 다양한 하드웨어를 설계할 수 있으므로, 하드웨어에 직접 접근 가능한 것은 문제를 매우 복잡하게 만들수 있습니다.
  • 따라서 일반적으로 커널은 운영체제 내부적으로 구현된 기능을 감추고 일관성 있는 인터페이스를 하드웨어에 제공하기 위해 몇 가지 하드웨어 추상화를 구현합니다.
  • 이 하드웨어 추상화는 프로그래머가 여러 장비에서 작동하는 프로그램을 개발하는데 도움을 줍니다.
  • 특히 하드웨어 추상화 계층(HAL)은 제조사의 장비 규격에 대하여 특정한 명령어를 제공할 수 있는 소프트웨어 드라이버에 의지하여 기능을 개발하거나 사용할 수 있습니다.

커널의 구조(Kernel's Architecture)

1.  일반 구조

1) 모놀리식 커널(단일형 커널, Monolithic Kernel)

  • 하드웨어 위에 높은 수준의 가상 계층을 제공하는 커널
  • 프로세스 관리, 동시성 관리, 메모리 관리 등을 관리자 모드에서 작동하며 사용자에게 고수준의 플랫폼을 제공하는 커널
  • 다수의 복잡한 애플리케이션을 동적으로 수행할 경우에 활용하기 좋음
  • 커널의 다양한 서비스 및 높은 수준의 하드웨어 추상화를 하나의 덩어리(주소 공간)로 묶은 것이다. 
  • 운영 체제 개발자 입장에서 유지 보수가 일반적으로 더 어려우나 성능이 좋다

2) 마이크로 커널(Micro Kernel)

  • 장치 드라이버, 프로토콜 스택, 파일 시스템과 같은 전통적인 OS의 기능들을 사용자 영역에 놓고 하드웨어 추상화를 최소화한 커널
  • 목적이 분명한 임베디드 시스템이나 성능 최적화가 필요한 영역에서 활용
  • 하드웨어 추상화에 대한 간결한 작은 집합을 제공하고 더 많은 기능은 서버라고 불리는 응용 소프트웨어를 통해 제공한다.

2. 하부구조

1) 혼합형 커널(Hybrid Kernel)

  • 성능 향상을 위해 추가적인 코드를 커널 공간에 넣은 점을 제외하면 많은 부분은 순수 마이크로커널과 비슷하다. 
  • 수정 마이크로커널이라고도 한다.

2)  나노 커널(Nano Kernel)

  • 실질적으로 모든 서비스를 책임지는 커널이다.
  • 커널의 하부 구조를 담당하고 있다. 
  • 엑소커널과 하이브리드 커널과 같은 수준(level)이다.

3) 엑소커널(Exo Kernel)

  • 낮은 수준의 하드웨어 접근을 위한 최소한의 추상화를 제공한다. 
  • 전형적으로 엑소커널 시스템에서는 커널이 아닌 라이브러리가 단일형 커널 수준의 추상을 제공한다.

리눅스(Linux)란?

  • 리눅스 운영체제는 1991년 9월 17일 리누스 토르발스에 의해 시작되었다. 
  • 운영 체제 커널을 리눅스 커널이라고 하며 유닉스 계열 운영 체제이다.
  •  초기에는 콘솔 터미널 형태로 동작되었다.

 

https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4

 

리눅스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 리눅스(Linux)개발자리누스 토르발스 (커뮤니티 주체)프로그래밍 언어C, 어셈블리어OS 계열유닉스 계열상태사용중,개발 중소스 형태오픈 소스최초 버전 출시일19

ko.wikipedia.org

 

LINUX에서의 확인 가능한 로그 파일

1)  utmp

  • 현재 시스템에 로그인한 사용자 정보가 들어있는 로그 파일, who, w, user 명령으로 확인 가능

 

2) lastlog

  • 사용자별 최근 로그인 시간 및 접근한 소스 호스트에 대한 정보를 확인할 수 있는 로그 파일

유닉스(Unix)란?

  • 유닉스는 교육 및 연구 기관에서 즐겨 사용되는 범용 다중 사용자 방식의 대화식, 시분할처리 시스템용 운영 체제
  • 1970년대 초반 벨 연구소 직원인 켄 톰슨, 데니스 리치 등이 소형 컴퓨터용으로 처음 개발.
  • 교육 및 연구 기관에서 사용되는 범융 다중 사용자 방식의 시분할 운영체제
  • 벨 연구소에서 개발한 운영체제로, 대부분의 현대적 컴퓨터 운영체제의 원형
  • 다양한 시스텡메 서로 이식할 수 있고 멀티 태스킹과 다중 사용자를 지원하도록 설계함

https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%89%EC%8A%A4

 

유닉스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 유닉스(영어: Unix)는 교육 및 연구 기관에서 즐겨 사용되는 범용 다중 사용자 방식의 대화식, 시분할처리 시스템용 운영 체제이다.[1] 1970년대 초반 벨 연구소 직

ko.wikipedia.org


 Unix의 특징

1) 대화식 운영체제 기능 제공

  • 프롬프트가 나타난 상태에서 사용자가 명령을 입력하면 시스템은 그 명령을 수행하는 사용자 명령 기반의 대화식 운영체제 기능을 제공

 

2) 다중 작업 기능 제공

  • 다수의 작업(프로세스)이 중앙처리장치(CPU)와 같은 공용 자원을 나누어 사용하여 한 번에 하나 이상의 작업을 수행하는 기능 제공

 

3) 다중 사용자 기능 제공

  • 여러 대의 단말(키보드와 모니터)이 하나의 컴퓨터에 연결되어서, 여러 사람이 동시에 시스템을 사용하여 각각의 작업을 수행할 수 있는 기능을 제공

 

4) 이식성 제공

  • 90% 이상 C 언어로 구현되어 있고, 시스템 프로그램이 모듈화되어 있어서 다른 하드웨어 기종으로 쉽게 이식 가능

 

5) 계층적 트리 구조 파일 시스템 제공

  • 유닉스는 계층적 트리 구조를 가지고 있어서 통합적안 파일 관리가 용이함

 리눅스(Linux)와 유닉스(Unix)의 표현식(expression)

1. 크론 표현식

순서 필드 이름 허용 값
1 분(Minutes) 0 ~ 59, 특수문자
2 시간(Hours) 0 ~ 23, 특수문자
3 일(Day of Month) 1 ~ 31, 특수문자
4 월(Month) 1 ~ 12, JAN ~ DEC, 특수문자
5 요일(Day of Week) 1 ~ 7 , SUN-SAT, 특수문자
6 연도(Year) 1970 ~ 2099, 특수문자

 

 

2. 쿼츠 크론 표현식

순서 필드 이름 허용 값
1 초(Seconds) 0 ~ 59, 특수문자
2 분(Minutes) 0 ~ 59, 특수문자
3 시간(Hours) 0 ~ 23, 특수문자
4 일(Day of Month) 1 ~ 31, 특수문자
5 월(Month) 1 ~ 12, JAN ~ DEC, 특수문자
6 요일(Day of Week) 1 ~ 7 , SUN-SAT, 특수문자
7 연도(Year) 1970 ~ 2099, 특수문자

 

크론 표현식에서 특수문자의 의미

기호 의미
* 모든 수
? 해당 항목을 미사용
- 기간 설정
, 특정 기간 설정
/ 시작 시간과 반복 시간 간격 설정
L 마지막 기간에 동작
W 가장 가까운 평일에 동작
# 몇 번째 주, 요일 설정

 


참고 자료

https://ko.wikipedia.org/wiki/%EC%85%B8

 

셸 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 1990년대의 그래픽 인터페이스는 man page를 위한 TUI 창을 제공하였다. 그 밖에 텍스트 창 또한 부분적으로 보인다. 명령 프롬프트는 윈도우의 CLI 셸이다. 배시는

ko.wikipedia.org

https://ko.wikipedia.org/wiki/%EC%BB%A4%EB%84%90_(%EC%BB%B4%ED%93%A8%ED%8C%85)

 

커널 (컴퓨팅) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 커널이 응용 소프트웨어를 컴퓨터 하드웨어에 연결하고 있다. 컴퓨터 과학에서 커널(kernel)은 컴퓨터 운영 체제의 핵심이 되는 컴퓨터 프로그램으로, 시스템의

ko.wikipedia.org

https://codingboycc.tistory.com/91

 

shell 쉘이란? 그리고 bash,zsh 등등

1. 쉘 Shell 이란?! - 리눅스의 쉘은 명령어와 프로그램을 실행할 때 사용하는 인터페이스이다. 쉘은 커널(Kernel)과 사용자간의 다리역할을 하는 것이다. 사용자로부터 명령을 받아 그것을 해석하고

codingboycc.tistory.com

https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4

 

리눅스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 리눅스(Linux)개발자리누스 토르발스 (커뮤니티 주체)프로그래밍 언어C, 어셈블리어OS 계열유닉스 계열상태사용중,개발 중소스 형태오픈 소스최초 버전 출시일19

ko.wikipedia.org

https://ko.wikipedia.org/wiki/GNU_%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8

 

GNU 프로젝트 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. GNU 프로젝트(GNU project)는 리처드 스톨먼의 주도하에 시작된 공개 소프트웨어 프로젝트이다. 1983년 9월 27일 유즈넷 net.unix-wizard 그룹을 통해 일반에 알려졌다. 스

ko.wikipedia.org