본문 바로가기

ETC & TIP/정보보호학 전공학습

[시스템보안개론] 운영체제에 대한 이해


 

INDEX

 

1. 운영체제의 개념과 기능

 

2. 윈도우에 대한 이해

 

3. 리눅스/유닉스에 대한 이해

 


 

 

 


1. 운영체제의 개념과 기능


학습목적

- 컴퓨터 시스템에 대해 알아본다.

- 운영체제에 대해 알아본다.

- 운영체제의 기능에 대해 알아본다.

- 운영체제의 종류와 특징에 대해 알아본다.

학습목표

- 운영체제의 개념 및 기능을 설명할 수 있다.

 

■ 주요용어

 

데이터베이스

여러 사람들이 공유하고 사용할 목적으로 논리적으로 연결되어 통합 관리되는

하나 이상의 정보 집합이다. 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고

자료를 구조화하여 저장한 자료의 집합체라고 할 수 있다.

DOS(Disk Operating System)

디스크를 기반으로 하는 컴퓨터에서 사용되는 운영체제로서 디스크에 읽고 쓰기 등의

명령을 수행하는 프로그램이다. 사용자가 명령을 직접 입력하면 줄 단위로 처리하는

특징이 있다. DOS의 대표적인 예로 마이크로소프트에서 만든 MS-DOS가 있다.

 

■ Think.

범용적인 시스템을 위한 범용 운영체제와 특수한 목적을 위해 사용되는 임베디드 시스템을 위한 임베디드 운영체제차이점에 대해서 생각해 보시기 바랍니다.

 

임베디드 시스템에 쓰이는 운영체제

임베디드 시스템을 어떤 특화된 목적을 위한 시스템으로 생각해 본다면 그 반대의 개념으로는 범용 시스템을 들 수 있습니다. 그렇다면 그 차이는 무엇일까요? 어떠한 개념을 확립하는데 있어서 그 반대되는 개념과의 차이를 명확히 구분짓는 것이 중요합니다.

시스템과 그 위에서 돌아가는 응용 프로그램의 관계를 설명하면서 두 개념을 풀이하면 범용 시스템은 응용 프로그램 자체가 시스템에게 맞추어 가는 것이고, 그에 반해 임베디드 시스템은 시스템이 응용 프로그램에게 맞추어 가는 것입니다. 이렇게 시스템이 응용 프로그램에게 맞추어가는 것을 Application Specific System이라고 합니다. 즉, 여러 가지 목적을 위한 범용 시스템은 하나의 시스템이 있고 그 위에서 수행될 응용 프로그램이 있고, 임베디드 시스템은 하나의 특화된 목적을 가진 응용 프로그램이 있고 그에 적합하게 시스템은 모습을 갖추는 것이 둘의 차이점이라 할 수 있습니다.
http://blog.naver.com/onlyou_4ever/40002992505

 

의견

범용적인 컴퓨터와 다르게 임베디드 시스템은 특수한 목적을 위해서 사용되기 때문에 불필요한 주변 기기를 없애고 필수적인 하드웨어만으로 구성된다. 따라서 임베디드 시스템의 용도에 맞추어 사용되지 않는 범용 컴퓨터 운영체제가 제공하는 기능을 없애고 간단하고 효율적으로 처리되도록 설계된다. 주로 실시간 처리 기능을 제공하는 경우가 많이 있다. 임베디드 시스템의 대표적인 예시로는 우리가 주로 사용하는 스마트폰, 태블릿, 차량용 네비게이션 등을 들 수 있다

 

컴퓨터 시스템 개념

 

 

컴퓨터 시스템의 개념

운영체제의 개념과 기능에 대해서 알아보도록 하겠습니다. 먼저 컴퓨터 시스템의 개념에 대해서 알아보도록 하겠습니다. 일반적으로 우리가 말하는 시스템은 특정 목적을 위해 구성된 각 컴포넌트들의 집합이다라고 볼 수가 있겠죠. 하지만 여기서 시스템 보안적인 관점에서 바라본 컴퓨터 시스템은 우리가 엔드유저와 응용프로그램 그리고 운영체제, 하드웨어로 구성되어 있다고 볼 수가 있겠습니다. 먼저 하드웨어는 물리적인 컴퓨터 자원을 얘기합니다. 우리가 흔히 볼 수 있는 중앙처리장치인 CPU 그리고 메모리, RAM, ROM 같은 경우가 있겠죠. 그리고 컴퓨터 의 모니터, 키보드, 마우스와 같은 입출력장치를 얘기합니다. 운영체제는 사용자가 컴퓨터의 하드웨어 사용을 원활하게 응용프로그램을 통해서 컴퓨터 하드웨어 사용을 원활하게 할 수 있도록 제어하거나 조정해 주는 역할을 수행을 하게 됩니다. 즉 다시 말하면 사용자에게 컴퓨터 사용을 위한 인터페이스를 제공한다라고 볼 수가 있겠죠. 운영체제의 대표적인 종류로는 우리가 현재 많이 사용하고 있는 윈도우 계열의 윈도우XP, 윈도우7 같은 것들이 있고요. 그다음에 유닉스, 리눅스 계열이 있고 최근에 많이 활용되고 있는 Mac5에서 10, 애플에서 나온 제품들이 있겠죠. 응용프로그램은 사용자들의 문제점을 해결하기 위한 소프트웨어입니다. 사용자가 문서 편집을 위한 엑셀, 워드프로세서 그리고 웹브라우징을 하기 위한 웹브라우저. 그리고 특정 목적에 맞는 데이터를 처리하기 위한 작업을 수행하기 위한 응용프로그램인 데이터베이스와 같은 것들을 우리는 응용프로그램이다라고 얘기를 할 수가 있겠습니다. 그다음에 엔드유저 같은 경우에는 우리가 일반적으로 생각할 때는 사람만이 엔드유저로 속한다고 생각하겠지만 실제적으로는 사람뿐만이 아니라 머신, 기계 그리고 또 다른 컴퓨터를 포함한 모든 개념을 엔드유저, 즉 사용자로 바라볼 수가 있겠습니다. 컴퓨터 하드웨어의 구성요소를 좀 더 자세히 살펴보면 중앙처리장치, 우리가 예전에 8086, 80286과 같은 그런 XT, AT 계열과 386, 현재 펜티엄 쿼드 그리고 펜티엄 코어 프로세서 그런 것과 같은 중앙처리장치가 있겠고요. 그다음 기억장치로는 RAM, ROM 같은 경우 일시적인 메모리를 저장하는 주기억장치와 영구적인 데이터를 저장할 수 있는 보조기억장치라고 불리는 보조저장장치가 있겠습니다. 입출력장치로는 키보드, 마우스와 같은 조이스틱, 입력장치와 모니터, 프린터, 스피커와 같은 출력장치를 합쳐서 입출력장치다라고 얘기할 수가 있겠죠. 기타 그 외 컴퓨터 하드웨어에 전원을 공급해 주는 파워서플라이, 전원공급장치 그리고 냉각송풍기 등이 컴퓨터 하드웨어의 구성요소로 포함될 수가 있겠습니다. 컴퓨터 시스템의 기능은 프로그램을 실행하거나 데이터를 저장하거나 데이터를 이동하거나 데이터를 입력 또는 출력, 제어하는 목적으로 사용됩니다. 먼저 프로그램의 실행 부분을 간단하게 살펴보면 CPU가 주기억장치, RAM 또는 ROM에 저장되어 있는 프로그램 코드를 읽어서 실행하는 명령 기능을 프로그램 실행 기능이다라고 얘기할 수가 있겠고요. 프로그램 이러한 실험 결과를 통해서 얻어진 결과를 주기억장치에 저장하는 기능을 데이터 저장 기능이다라고 얘기할 수가 있습니다. 데이터 이동은 주기억장치와 보조기억장치 또는 주기억장치와 보조기억장치에 저장되어있는 프로그램과 데이터 블록을 주기억장치로 이동하는 기능을 수행하는 것이 데이터 이동의 기능이고요. 사용자가 컴퓨터 하드웨어에 특정 명령을 내리기 위해 사용되는 특정 기능을 위해 사용되는 명령이나 또는 데이터 입력 이런 것들을 데이터 입력기능. CPU가 처리한 결과값에 대해서 기억장치의 내용을 출력장치로 출력하는 기능을 데이터 출력 기능이다라고 얘기할 수가 있겠습니다. 마지막으로 컴퓨터의 중요한 기능 중의 하나인 제어 기능이 있습니다. 프로그램이 실행되는 과정 중에 특정 스케줄에 맞춰서 제어되도록 이러한 기능을 하는 것이고요. 필요에 따라서 우선순위를 변경해서 어떤 프로그램이 먼저 우선 순위를 두도록 할당할 것인가라는 부분도 제어기능에 속합니다. 컴퓨터 시스템의 기본구조를 좀 더 자세히 살펴보도록 하겠습니다. 컴퓨터 시스템의 기본구조는 중앙처리장치인 CPU와 기억장치인 메모리, 입출력장치인 인풋, 아웃풋, 디바이스들이 시스템 버스를 이용해서 서로 통신을 주고받는 형태로 구조를 이루고 있습니다. 중앙처리장치 같은 경우에는 우리가 프로세서다라고 얘기하기도 합니다. 프로그램의 실행과 데이터 처리, 이 두 가지의 큰 역할을 담당하고 있고요. 주기억장치 같은 경우에는 CPU의 가까이에 위치하고 있으며 반도체 기억장치 칩들로 구성되어 있습니다. 보조기억장치에 비해서 고속 액세스가 가능하다는 장점이 있는 반면에 저장 용량의 한계로 가격이 높고 또 면적을 많이 차지하는 단점이 있습니다. 그리고 RAM 같은 경우, 우리가 Random Access Memory 다라고 부르는 RAM 같은 경우는 휘발성 메모리의 특징을 지니기 때문에 사용자가 데이터를 저장을 하더라도 전원이 차단되면 이 데이터가 모두 삭제되는, 즉 일시적인 저장 기능만을 담당하고 있는 특징이 있습니다. 보조기억장치는 보조저장장치라고도 부릅니다. 2차 기억장치라고도 부르면서 기계적인 장치가 포함되어 있기 때문에 저속으로 주기억장치에 비해서 느린 속도로 데이터 처리를 하게 됩니다. 하지만 저장 밀도가 높고 비트당 비용이 증가하면서 영구적인 저장능력을 가지고 있기 때문에 우리가 전원이 차단되더라도 데이터를 계속해서 보관을 하고 있을 수 있다라는 장점이 있습니다. 대표적인 것들이 하드 드라이브 그리고 솔리드 스테이트 드라이브, CD-ROM 같은 것들이 있습니다. 입출력장치는 사용자가 장치와 CPU 간의 데이터 이동을 위한 별도의 제어 기계를 통해서 사용자와 컴퓨터 사이의 데이터를 주고받기 위한 도구로 활용이 되는 장치들입니다. 키보드, 마우스, 조이스틱, 모니터, 프린터, 사운드 스피커, 이런 것들이 입출력장치로 포함이 되겠습니다. 컴퓨터가 데이터를 주고받기 위해서는 1과 0으로 구성된 2진수 비트로 우리가 프로그램 코드랑 데이터를 주고받는, 주고받도록 되어 있습니다. 프로그램 코드는 기계어, 어셈블리어, 고급언어가 있는데 먼저 기계어 같은 경우에는 컴퓨터 하드웨어적인, 즉 하드웨어가 직접적으로 이해할 수 있는 언어입니다. 0과 1로 이루어진 2진 비트로 구성되어 있는 것이 특징입니다. 그에 반면 어셈블리어 같은 경우에는 기계어와 사용자가 이해하기 위한 고급언어의 중간에 위치하는 언어로서 저급언어다라고 얘기합니다. 그래서 기계어 코드를 사람이 이해할 수 있는 심볼로 표현한 형태입니다. 고급언어 같은 경우에는 컴퓨터를 배려하기보다는 사람이 이해하기 쉬운 언어를 고급언어라고 얘기합니다. 그래서 영문자 또는 숫자로 구성돼 있고 특정한 규칙에 맞춰서, 우리가 원하는 규칙에 맞춰서 배열된 프로그램 방식입니다. 우리가 C, C++, JAVA, Python, POTRAN 이런 것들을 예로 들 수가 있겠습니다. 그래서 고급언어 그리고 어셈블리 프로그램, 기계어로 변환되는 과정에 대해서 살펴보도록 하겠습니다. 사용자가 고급언어인 Z=X+Y에서 X에 들어 있는 값과 Y에 들어 있는 데이터를 더해서 Z에 보안을 한다라는 고급언어를 사용을 하였습니다. 그럼 어셈블리 프로그램을 통해서 나온 저급언어 같은 경우에는 먼저 LOAD A, X에서 X번지, 사용자가 데이터를 저장한 X번지의 내용을 읽어서 레지스터에 보관을 하고 그다음에 Y번지의 내용을 읽어서 A의 레지스터에 저장을 한 후에 이 둘에 저장된 데이터를 더해서 A에 저장한 후에 이 저장된 A 레지스터 공간에 있는 데이터를 Z번지에 저장한다는 변환을 통해서 이 프로그램이 실행됩니다. 최종적으로 우리가 컴파일러를 통해서 고급언어를 기계어 프로그램으로 번역을 하게 됩니다. 이 컴파일러는 어셈블리어 프로그램을 기계어 프로그램, 즉 0과 1로 이루어진 기계어 프로그램으로 번역하는 소프트웨어입니다. 니모닉스라는 어셈블리어 명령어가 지정하는 동작을 개략적으로 사람이 이해하기 쉬운 언어로 사용된 기호체계를 니모닉스라고 얘기하는데 이 니모닉스를 사용해서 컴파일러에게 어셈블리어 명령을 내리게 됩니다. 이를 통해서 나온 기계어 명령어는 연산코드와 오퍼랜드라는 구조를 가지고 0과 1로 데이터 형식이 처리가 됩니다. 연산코드는 CPU가 수행할 연산을 지정해 주는 비트입니다. 여기서는 하나, 둘, 세 개. 총 3비트가 사용이 되었기 때문에 최대 사용할 수 있는 연산의 개수는 2의 3승개인 8, 8개가 되겠습니다. 오퍼랜드는 저장되거나 연산에 사용될 데이터가 저장된 기억장치의 주소를 나타냅니다. 직접적인 데이터가 아니라 기억장치의 주소를 나타내고 여기서는 비트 수가 5개의 비트를 가지고 있기 때문에 2의 5승인 32개, 최대 32개 크기, 32비트 크기의 기억장소 주소를 사용을 할 수가 있겠습니다.

운영체제의 개념
시스템보안개론 1주차 1차시 운영체제의 개념과 기능에 대해서 알아보도록 하겠습니다. 먼저 컴퓨터 시스템의 개념에 대해서 알아보도록 하겠습니다. 일반적으로 우리가 말하는 시스템은 특정 목적을 위해 구성된 각 컴포넌트들의 집합이다라고 볼 수가 있겠죠. 하지만 여기서 시스템 보안적인 관점에서 바라본 컴퓨터 시스템은 우리가 엔드유저와 응용프로그램 그리고 운영체제, 하드웨어로 구성되어 있다고 볼 수가 있겠습니다. 먼저 하드웨어는 물리적인 컴퓨터 자원을 얘기합니다. 우리가 흔히 볼 수 있는 중앙처리장치인 CPU 그리고 메모리, RAM, ROM 같은 경우가 있겠죠. 그리고 컴퓨터 의 모니터, 키보드, 마우스와 같은 입출력장치를 얘기합니다. 운영체제는 사용자가 컴퓨터의 하드웨어 사용을 원활하게 응용프로그램을 통해서 컴퓨터 하드웨어 사용을 원활하게 할 수 있도록 제어하거나 조정해 주는 역할을 수행을 하게 됩니다. 즉 다시 말하면 사용자에게 컴퓨터 사용을 위한 인터페이스를 제공한다라고 볼 수가 있겠죠. 운영체제의 대표적인 종류로는 우리가 현재 많이 사용하고 있는 윈도우 계열의 윈도우XP, 윈도우7 같은 것들이 있고요. 그다음에 유닉스, 리눅스 계열이 있고 최근에 많이 활용되고 있는 Mac5에서 10, 애플에서 나온 제품들이 있겠죠. 응용프로그램은 사용자들의 문제점을 해결하기 위한 소프트웨어입니다. 사용자가 문서 편집을 위한 엑셀, 워드프로세서 그리고 웹브라우징을 하기 위한 웹브라우저. 그리고 특정 목적에 맞는 데이터를 처리하기 위한 작업을 수행하기 위한 응용프로그램인 데이터베이스와 같은 것들을 우리는 응용프로그램이다라고 얘기를 할 수가 있겠습니다. 그다음에 엔드유저 같은 경우에는 우리가 일반적으로 생각할 때는 사람만이 엔드유저로 속한다고 생각하겠지만 실제적으로는 사람뿐만이 아니라 머신, 기계 그리고 또 다른 컴퓨터를 포함한 모든 개념을 엔드유저, 즉 사용자로 바라볼 수가 있겠습니다. 컴퓨터 하드웨어의 구성요소를 좀 더 자세히 살펴보면 중앙처리장치, 우리가 예전에 8086, 80286과 같은 그런 XT, AT 계열과 386, 현재 펜티엄 쿼드 그리고 펜티엄 코어 프로세서 그런 것과 같은 중앙처리장치가 있겠고요. 그다음 기억장치로는 RAM, ROM 같은 경우 일시적인 메모리를 저장하는 주기억장치와 영구적인 데이터를 저장할 수 있는 보조기억장치라고 불리는 보조저장장치가 있겠습니다. 입출력장치로는 키보드, 마우스와 같은 조이스틱, 입력장치와 모니터, 프린터, 스피커와 같은 출력장치를 합쳐서 입출력장치다라고 얘기할 수가 있겠죠. 기타 그 외 컴퓨터 하드웨어에 전원을 공급해 주는 파워서플라이, 전원공급장치 그리고 냉각송풍기 등이 컴퓨터 하드웨어의 구성요소로 포함될 수가 있겠습니다. 컴퓨터 시스템의 기능은 프로그램을 실행하거나 데이터를 저장하거나 데이터를 이동하거나 데이터를 입력 또는 출력, 제어하는 목적으로 사용됩니다. 먼저 프로그램의 실행 부분을 간단하게 살펴보면 CPU가 주기억장치, RAM 또는 ROM에 저장되어 있는 프로그램 코드를 읽어서 실행하는 명령 기능을 프로그램 실행 기능이다라고 얘기할 수가 있겠고요. 프로그램 이러한 실험 결과를 통해서 얻어진 결과를 주기억장치에 저장하는 기능을 데이터 저장 기능이다라고 얘기할 수가 있습니다. 데이터 이동은 주기억장치와 보조기억장치 또는 주기억장치와 보조기억장치에 저장되어있는 프로그램과 데이터 블록을 주기억장치로 이동하는 기능을 수행하는 것이 데이터 이동의 기능이고요. 사용자가 컴퓨터 하드웨어에 특정 명령을 내리기 위해 사용되는 특정 기능을 위해 사용되는 명령이나 또는 데이터 입력 이런 것들을 데이터 입력기능. CPU가 처리한 결과값에 대해서 기억장치의 내용을 출력장치로 출력하는 기능을 데이터 출력 기능이다라고 얘기할 수가 있겠습니다. 마지막으로 컴퓨터의 중요한 기능 중의 하나인 제어 기능이 있습니다. 프로그램이 실행되는 과정 중에 특정 스케줄에 맞춰서 제어되도록 이러한 기능을 하는 것이고요. 필요에 따라서 우선순위를 변경해서 어떤 프로그램이 먼저 우선 순위를 두도록 할당할 것인가라는 부분도 제어기능에 속합니다. 컴퓨터 시스템의 기본구조를 좀 더 자세히 살펴보도록 하겠습니다. 컴퓨터 시스템의 기본구조는 중앙처리장치인 CPU와 기억장치인 메모리, 입출력장치인 인풋, 아웃풋, 디바이스들이 시스템 버스를 이용해서 서로 통신을 주고받는 형태로 구조를 이루고 있습니다. 중앙처리장치 같은 경우에는 우리가 프로세서다라고 얘기하기도 합니다. 프로그램의 실행과 데이터 처리, 이 두 가지의 큰 역할을 담당하고 있고요. 주기억장치 같은 경우에는 CPU의 가까이에 위치하고 있으며 반도체 기억장치 칩들로 구성되어 있습니다. 보조기억장치에 비해서 고속 액세스가 가능하다는 장점이 있는 반면에 저장 용량의 한계로 가격이 높고 또 면적을 많이 차지하는 단점이 있습니다. 그리고 RAM 같은 경우, 우리가 Random Access Memory 다라고 부르는 RAM 같은 경우는 휘발성 메모리의 특징을 지니기 때문에 사용자가 데이터를 저장을 하더라도 전원이 차단되면 이 데이터가 모두 삭제되는, 즉 일시적인 저장 기능만을 담당하고 있는 특징이 있습니다. 보조기억장치는 보조저장장치라고도 부릅니다. 2차 기억장치라고도 부르면서 기계적인 장치가 포함되어 있기 때문에 저속으로 주기억장치에 비해서 느린 속도로 데이터 처리를 하게 됩니다. 하지만 저장 밀도가 높고 비트당 비용이 증가하면서 영구적인 저장능력을 가지고 있기 때문에 우리가 전원이 차단되더라도 데이터를 계속해서 보관을 하고 있을 수 있다라는 장점이 있습니다. 대표적인 것들이 하드 드라이브 그리고 솔리드 스테이트 드라이브, CD-ROM 같은 것들이 있습니다. 입출력장치는 사용자가 장치와 CPU 간의 데이터 이동을 위한 별도의 제어 기계를 통해서 사용자와 컴퓨터 사이의 데이터를 주고받기 위한 도구로 활용이 되는 장치들입니다. 키보드, 마우스, 조이스틱, 모니터, 프린터, 사운드 스피커, 이런 것들이 입출력장치로 포함이 되겠습니다. 컴퓨터가 데이터를 주고받기 위해서는 1과 0으로 구성된 2진수 비트로 우리가 프로그램 코드랑 데이터를 주고받는, 주고받도록 되어 있습니다. 프로그램 코드는 기계어, 어셈블리어, 고급언어가 있는데 먼저 기계어 같은 경우에는 컴퓨터 하드웨어적인, 즉 하드웨어가 직접적으로 이해할 수 있는 언어입니다. 0과 1로 이루어진 2진 비트로 구성되어 있는 것이 특징입니다. 그에 반면 어셈블리어 같은 경우에는 기계어와 사용자가 이해하기 위한 고급언어의 중간에 위치하는 언어로서 저급언어다라고 얘기합니다. 그래서 기계어 코드를 사람이 이해할 수 있는 심볼로 표현한 형태입니다. 고급언어 같은 경우에는 컴퓨터를 배려하기보다는 사람이 이해하기 쉬운 언어를 고급언어라고 얘기합니다. 그래서 영문자 또는 숫자로 구성돼 있고 특정한 규칙에 맞춰서, 우리가 원하는 규칙에 맞춰서 배열된 프로그램 방식입니다. 우리가 C, C++, JAVA, Python, POTRAN 이런 것들을 예로 들 수가 있겠습니다. 그래서 고급언어 그리고 어셈블리 프로그램, 기계어로 변환되는 과정에 대해서 살펴보도록 하겠습니다. 사용자가 고급언어인 Z=X+Y에서 X에 들어 있는 값과 Y에 들어 있는 데이터를 더해서 Z에 보안을 한다라는 고급언어를 사용을 하였습니다. 그럼 어셈블리 프로그램을 통해서 나온 저급언어 같은 경우에는 먼저 LOAD A, X에서 X번지, 사용자가 데이터를 저장한 X번지의 내용을 읽어서 레지스터에 보관을 하고 그다음에 Y번지의 내용을 읽어서 A의 레지스터에 저장을 한 후에 이 둘에 저장된 데이터를 더해서 A에 저장한 후에 이 저장된 A 레지스터 공간에 있는 데이터를 Z번지에 저장한다는 변환을 통해서 이 프로그램이 실행됩니다. 최종적으로 우리가 컴파일러를 통해서 고급언어를 기계어 프로그램으로 번역을 하게 됩니다. 이 컴파일러는 어셈블리어 프로그램을 기계어 프로그램, 즉 0과 1로 이루어진 기계어 프로그램으로 번역하는 소프트웨어입니다. 니모닉스라는 어셈블리어 명령어가 지정하는 동작을 개략적으로 사람이 이해하기 쉬운 언어로 사용된 기호체계를 니모닉스라고 얘기하는데 이 니모닉스를 사용해서 컴파일러에게 어셈블리어 명령을 내리게 됩니다. 이를 통해서 나온 기계어 명령어는 연산코드와 오퍼랜드라는 구조를 가지고 0과 1로 데이터 형식이 처리가 됩니다. 연산코드는 CPU가 수행할 연산을 지정해 주는 비트입니다. 여기서는 하나, 둘, 세 개. 총 3비트가 사용이 되었기 때문에 최대 사용할 수 있는 연산의 개수는 2의 3승개인 8, 8개가 되겠습니다. 오퍼랜드는 저장되거나 연산에 사용될 데이터가 저장된 기억장치의 주소를 나타냅니다. 직접적인 데이터가 아니라 기억장치의 주소를 나타내고 여기서는 비트 수가 5개의 비트를 가지고 있기 때문에 2의 5승인 32개, 최대 32개 크기, 32비트 크기의 기억장소 주소를 사용을 할 수가 있겠습니다.
운영체제의 기능
운영체제의 기능에 대해서 알아보도록 하겠습니다. 운영체제의 역할은 아까 말했다시피 궁극적인 역할은 이 컴퓨터 자원을 사용자가 얼마만큼 그리고 어떻게 자기가 원하는 방향으로 처리할 수 있느냐 하는 시스템 소프트웨어를 운영체제다라고 얘기를 했었습니다. 그래서 운영체제는 컴퓨터 시스템의 문제 해결을 위해서 필요한 자원을 할당해 주는 자원 할당자의 기능 역할을 수행을 하고 있고요. 이 운영체제의 역할에 대해서 좀 더 자세히 계층적인 살펴보면 사용자가 운영체제를 통해서 기억장치를 제어하거나 아니면 프로세서를 제어, 입출력장치를 제어하거나 정보를 제어하는 기능들을 수행하게 되겠고요. 최근에는 네트워크 기능이 필수적으로 요청이 되고 있기 때문에 네트워크 기능이 활성화된 이러한 자원을 활용할 수 있는 방법들도 운영체제를 통해서 사용자가 제공을 받고 있습니다. 이 사용자 명령 인터페이스와 서버 시스템의 관리자로 나눠서 생각을 해볼 수가 있겠는데요. 사용자 명령 인터페이스 같은 경우에는 사용자와 시스템 간의 대화 수단으로서 우리가 사용자 명령 인터페이스가 활용됩니다. 기존의 도스라든지 또는 현재 사용되고 있는 유닉스, 리눅스 체계에서의 운영체제에 있어서는 셸이라는 이 이 부분을 담당하고 있고요. 그다음에 윈도우 같은 경우, 마이크로소프트사의 윈도우. 그리고 Mac5에서 10 버전 같은 경우 아이콘이나 메뉴를 통해서 사용자에게 명령을 내릴 수 있도록 도와주는 역할을 수행하고 있습니다. 이 메모리 관리자의 역할은 프로그램 메모리 요청의 적합성을 점검한다든지 그다음에 사용자가 실행하고 있는 프로그램의 메모리를 할당한다든지 또는 이 응용프로그램이 종료가 된 후에 더 이상 필요 없는 메모리를 회수하는 이런 부분들의 기능을 담당하고 있고요. 프로세서 관리자 같은 경우에는 사용자가 실행하는 응용프로그램 명령들이 원활하게 스케줄링될 수 있도록 하는 스케줄링 부분과 그리고 사용자의 요청에 따라서 사용자의 요청 권한 부분을 확인하거나 또는 사용자의 요청에 자원을 할당해 주는 부분을 통해서 수용하거나 또는 거부하는 관리자 역할을 수행하기도 합니다. 장치관리자는 이 사용자가 사용하고 있는 컴퓨터 시스템 하드웨어에 연결된 모든 장치들과 프로그램이 서로 연결될 수 있도록 할당해 주거나 또는 회수하는 역할을 수행한다라고 볼 수가 있겠죠. 파일 관리자 같은 경우에는 사용자의 권한에 맞게끔 사용자의 접근 권한을 부여하는 역할을 말합니다. 그리고 접근 권한에 따라서 파일을 할당해 주거나 또는 어떤 사람들이 언제 접속을 했는지 히스토리 로그 기능을 하는 감사 기능까지도 파일 관리자의 기능으로 포함할 수가 있겠습니다. 그리고 현재 운영체제에 있어서 가장 중요한 부분이다라고 얘기할 수 있는 네트워크 관리자 기능입니다. 네트워크에서 접근 가능한 자원을 관리하고 이를 통해서 사용자 에게 편리한 서비스를 제공해 주는 역할을 수행하고 있습니다.

운영체제의 종류와 특징
다음으로 운영체제의 종류와 특징에 대해서 살펴보도록 하겠습니다. 지금 현재 우리가 사용할 수 있는 운영체제는 굉장히 많이 있습니다. 수천, 수만 개 종류의 운영체제들이 존재를 하고 있지만 그중에 특별히 특징들은, 각 모든 운영체제들을 대표하는 그런 대표적인 특징을 갖는 운영체제들만 집어서 설명을 해보도록 하겠습니다. 먼저 DOS입니다. DOS는 우리가 Disk Operation System이다라고 얘기를 합니다. 이유는 디스크 상에서 저장되어 있고 이 디스크를 통해서 실행되는 운영체제였기 때문입니다. 처음으로 개인용 컴퓨터에서 사용된 운영체제다라고 우리가 얘기할 수 있겠습니다. 1980년대 초부터 90년대 초까지 대부분의 PC에서 사용이 되고 있었으며 그중에서 IBM PC에서 대표적으로 많이 사용되는 게 MS-DOS가 있었겠죠. 또 다른 DOS 종류로는 PC-DOS와 Dr-DOS가 있었습니다. 이 DOS의 특징이다라고 얘기를 한다면 텍스트 기반의 사용자 환경을 제공을 해줬습니다. 사용자들이 필요한 명령어를 자신들이 숙지하고 이것들을 사용을 할 때 컴퓨터에게 인풋 도구인 키보드를 통해서 컴퓨터에게 명령을 내려야 한다라는 그런 특징들이 있었습니다. 대표적으로 안의, 특정 디스크 드라이브 안의 데이터를 출력하고 싶다고 얘기를 한다면 DIR이라는 명령어를 쳐서 우리가 안의 내용들을 살펴봤었습니다. 그리고 DOS 같은 경우에는 멀티태스킹 환경이 불가능하다라는 단점이 존재하게 됩니다. OS/2 같은 경우에는 이러한 마이크로소프트에서 만들어진 MS-DOS의 한계점을 극복하기 위해서 마이크로소프트사와 IBM이 공동으로 제작한 컴퓨터 운영체제입니다. 초기에는 80286을 목적으로 설계를 하다가 점차 시간이 지나면서 80386, 80486 PC에서도 사용이 될 수 있도록 계속적으로 업그레이드를 진행을 하였습니다. 이 OS/2 Operation System 2 버전 같은 경우에는 안정성이 굉장히 뛰어나고 응용프로그램에 의한 시스템 다운 현상이 없었다라는 장점을 갖고 있습니다. 그리고 DOS 환경이 CLI 환경이 아니라 GUI 방식의 사용자 인터페이스를 통해서 좀 더 직관적으로 화면 관리가 가능했다라는 장점이 있었습니다. 하지만 이 OS/2를 기반으로 하고 있는 소프트웨어가 굉장히 적었고 또 이를 개발하고자 하는 소프트웨어 개발자들 또한 굉장히 적었다라는 단점 때문에 OS/2 버전을 위한 소프트웨어들이 굉장히 적었고 개발자들이 적다라는 단점과 그리고 MS-DOS 프로그램, 이것들을 OS/2 버전에 맞게끔 재배포할 수 있는 그런 환경들이 협소했기 때문에 이 OS/2버전의 수요가 거의 없었다라고 볼 수가 있겠습니다. MS-DOS의 멀티태스킹이 제약되어있는 환경과 그다음에 640KB의 메모리를 사용할 수밖에 없는 이러한 환경적인 제약조건을 극복하기 위해서 마이크로소프트에서 윈도우라는 운영체제를 만들기 시작합니다. 1985년도부터 꾸준히 계속 발표를 하면서 버전 업그레이드가 진행이 되고 있고요. 현재로서는 윈도우XP, 윈도우7, 윈도우8.1 버전 이런 것들이 대표적인 OS라고 볼 수가 있겠습니다. 1995년도에 윈도우 95가 처음에 출시되었는데 이때는 통합된 TCP/IP라든지 전화 접속 네트워킹을 위한 환경, 그리고 긴 이름의 파일을 최대 255자의 파일명을 지원할 수 있다는 이러한 기능들을 도입을 하게 됩니다. 현재로써는 이런 멀티미디어 기능들이 많이 보강된 운영체제들이 존재를 하고 있겠습니다. 유닉스 같은 경우에는 AT&T의 벨 연구소에서 처음에 만들어진 운영체제로서 중형 컴퓨터에서 사용될 목적으로 PDP7이 그 시초라고 볼 수 있겠죠. 그리고 멀틱스의 개념을 실행할 수 있도록 개발된 운영체제입니다. 여러 가지 유틸리티가 공개되면서 일반 사용자들에게까지도 확산이 되었습니다. 유닉스 같은 경우에는 멀틱스의 개념을 구현하기 위한 목적으로 개발된 운영체제이기 때문에 멀틱스에서 사용된 개념들이 대부분 다 구현되어 있습니다. 그중에 대표적으로 다중 사용자, 다중작업처리기능. 그리고 프로그램 개발이 쉬운 운영체제. 일반 통신 서비스들을 모두 제공할 수 있다라는 이런 기본 기능들까지도 제공하는 것이 유닉스의 특징입니다. 리눅스는 유닉스를 IBM PC 80X86 컴퓨터에서 실행할 수 있도록 만들겠다라는 목적을 가지고 핀란드 헬싱키대학에 있는 리누스 토발즈라는, 그때 당시 대학생이었던 리누스 토발즈라는 사람이 만든 운영체제입니다. 쉽게 얘기하면 개인 사용자용 컴퓨터에서 동작하는 유닉스다. 유닉스 운영체제라고 볼 수 있겠습니다. 리눅스의 특징이다라고 얘기하면 소스코드가 공개되어 있기 때문에 전 세계 수천, 수만의 개발자들이 함께 개발을 진행을 해오고 있고요. 그다음에 또 이에 따라서 프로그래머, 개발자들이 자신이 원하는 대로 특정 기능을 추가하거나 삭제하는 것이 가능하다라는 특징을 갖고 있습니다. 그래서 현재 임베디드 시스템 같은 경우에서 특정 목적을 위해 활용되고 있는 임베디드 시스템에서 많이 사용이 되고 있는 운영체제이기도 합니다. 다양한 플랫폼을 지원을 하고 있고 무료로 사용할 수가 있다라는 특징이 있습니다. 리눅스 같은 경우에는 우분투, 레드햇, 데비안, 슬랙웨어 등이 있습니다. 이 Mac OS 같은 경우에는 애플 컴퓨터, 즉 매킨토시 계열 컴퓨터에서 사용되기 위한 목적으로 개발된 운영체제입니다. 그래서 개인용 컴퓨터에 처음으로 GUI라는 Graphic User Interface라는 개념을 도입을 했고요. 현재까지 계속 발전을 해 나가고 있으면서 전통적인 클래식 시리즈는 Mac OS 9 버전이 있고요. 현재로는 Mac OS 10 버전, 매버릭스 버전이 현재 가장 최신 버전으로 사용이 되고 있습니다. Mac OS의 특징이다라고 얘기를 한다면 문서 편집이라든지 그래픽, 최근에는 음향 멀티미디어 편집까지도 많은 분야에 있어서 활용이 되고 있으며 애플의 스마트폰인 아이폰에서도 사용할 수 있도록 IOS라는 OS로 개량이 되어서 지금 현재 사용이 되고 있습니다. 솔라리스는 유닉스를 개량해서 만든 운영체제 중의 하나입니다. 리눅스보다 먼저 출시가 된 상용 운영체제로서 처음에 SUN에서 스팍 CPU를 사용하고 있는 시스템에서 사용하기 위한 목적으로 처음에 도입을 해서 개발하였습니다. 하지만 이후에 인텔 아키텍처가 많이 대량화, 보급화되면서 인텔 아키텍처를 지원할 수 있는 기능까지도 포함을 하게 됩니다.

학습정리

1. 운영체제란 사용자가 컴퓨터 시스템을 손쉽게 사용하고, 시스템 자원을 효율적으로 관리할 수 있도록 하는 프로그램

집합이다.

2. 시스템은 메모리 관리자, 프로세서 관리자, 장치 관리자, 파일 관리자, 네트워크 관리자로 구성되어 있다.

 

 


 

2. 윈도우에 대한 이해


학습목적

- 윈도우의 역사에 대해 알아본다.

- 윈도우의 구조에 대해 알아본다.

- 윈도우의 부팅순서에 대해 알아본다.

학습목표

- 윈도우의 구조 및 부팅 순서에 대해 설명할 수 있다.

 

■ 주요용어

 

HAL(hardware abstraction layer)

컴퓨터에서, HAL은 컴퓨터 운영체계가 자세한 하드웨어 계층이 아닌 일반적이거나, 추상적인 계층에서 하드웨어 서비스와 상호 작용할 수 있게 해주는 프로그램 계층이다. 윈도우2000은 HAL을 포함하고 있는 운영체계 중 하나이다. HAL은 운영체계의 커널이나 장치 드라이버로부터 호출될 수 있다. 어떤 경우든, 호출되는 프로그램은 그렇지 않은 경우보다, 장치와 좀더 일반적인 방식으로 상호 작용할 수 있다.

바이오스(BIOS; Basic Input/Output System)

바이오스(BIOS; Basic Input/Output System)는 넓은 의미로 컴퓨터에 탑재된 프로그램 중에서 하드웨어와 가장 낮은 수준에서 입출력을 담당하는 프로그램을 가리킨다. 좁은 의미의 정의에선 IBM-PC 호환 기종에 탑재된 것을 말하며, 보통 이 뜻으로 쓰인다. 바이오스는 컴퓨터에서 하드웨어와 소프트웨어의 중간 형태를 가지는 펌웨어의 일종으로, 대부분 소프트웨어가 하드웨어를 제어하고 하드웨어에 의해 변경되거나 생성된 정보를 소프트웨어에서 처리할 수 있도록 전달하는 등 인간의 신경망과 같은 기능을 수행한다.

 

■ Think.

윈도우 버전에 따른 부팅 순서 차이점에 대해서 생각해 보시기 바랍니다.

 

하드웨어에서 수행하는 단계는 모든 운영체제가 동일하다.
이후 실제 사용자의 하드 드라이버에 설치된
운영체제의 정보를 읽어드리는 부분에서 상이합니다.
윈도우 vista, 윈도우 2008, 윈도우 7 이 버전 이후 버전에서는
윈도우 부트 매니저라는 윈도우 Configuration Data를 통해서

운영체제의 목록을 출력했으며 그 후에 윈도우 OS 로더를
실행해서 장치 드라이브 및 윈도우 OS Kernel을
불러들이는 과정을 수행을 하였습니다.

 

윈도우 부팅 순서는 하드웨어에 수행하는 POST 실행, CMOS 설정 내용 적용, MBR 로드는 동일하다. 이후 순서는 윈도우 버전에 따라서 실행되는 로더가 다르다. 윈도우 XP, 윈도우 서버 2000, 윈도우 서버 2003까지는 부팅 옵션을 보여주기 위해서는 boot.ini를 읽어 들이는 NT Loader를 실행하고, NTDETECT.com을 통해 장치 드라이버 및 ntoskrnl.exe를 불러들이는 과정을 수행한다. 윈도우 비스타부터는 윈도우 부트 매니저를 통해 BCD를 운영체제 목록을 출력한다. 그 후 윈도우 OS 로더 실행하여 장치 드라이버 및 ntoskrnl.exe를 불러들이는 과정을 수행한다.

 

 

윈도우의 역사

시스템보안개론 1주차 2차시 윈도우에 대한 이해를 시작하도록
하겠습니다. 먼저 윈도우의 역사에 대해서 간단하게

살펴보도록 하겠습니다. 초기 윈도우는 1981년도에
마이크로소프트에서 출시한 MS-DOS를 시작으로

역사를 시작하고 있습니다. 이 MS-DOS 같은 경우에는
IBM PC에서 널리 사용되었으며 이때 640KB(킬로바이트) 이상의

메모리를 활용할 수 없다는 단점과 멀티테스킹이 힘들다는
한계점 때문에 약점을 극복하기 위해서 윈도우로

대체되기 시작합니다. 1980년도부터 시작된 윈도우는
약 20년 동안 여러 가지 버전의 윈도우를 출시해 왔으며

그중에서 특히 윈도우 2000와 윈도우XP 같은 경우에는
우리나라 현재 금융기관과 여러 관공서에서 널리

사용되고 있습니다. 윈도우는 널리 사용되는 운영체제로써
얼마 전 업데이트를 지원한 윈도우XP가 지금 현재

마이크로소프트사의 가장 큰 경쟁자로서 두각 되고 있는
상황입니다.

 

윈도우의 구조
다음으로 윈도우의 구조에 대해서 살펴보도록 하겠습니다. 윈도우 구조에 대해서 살펴보기 전에 간단하게 커널을 정리하고 넘어가겠습니다. 커널은 운영체제의 중심에 위치하고 있으며 인터럽트 처리, 프로세스 처리, 메모리 관리, 파일 시스템 관리, 프로그래밍 인터페이스 제공 등 운영체제에 최소한의 기본핵심기능을 제공하는 역할을 수행하고 있습니다. 윈도우는 링 구조를 이루고 있으며 하드웨어, 하드웨어 제어를 위한 하드웨어 추상화 계층 그리고 마이크로 커널, 각종 관리자 그리고 사용자가 사용하게 되는 운영체제에서 동작하는 응용프로그램으로 구성됩니다. 윈도우 구조는 다음과 같이 좀 더 자세하게 살펴보도록 하겠습니다. 이 중에서 하드웨어는 하드웨어 제어를 위한 하드웨어 추상화 계층, 그리고 마이크로 커널, 입출력 관리자를 비롯하여 장치 관리자까지의 주변의 모든 관리자까지를 우리는 커널 모드라고 얘기를 하고 있으며 이 운영체제를 통해서 실행되는 32비트 또는 16비트 응용프로그램들을 사용자모드로 정의할 수가 있겠습니다. 하드웨어 추상화 계층은 하드웨어와 개발된 소프트웨어 간에 원활한 통신이 가능하도록 도와주는 번역기 역할을 수행하고 있습니다. 그리고 마이크로 커널 같은 경우에는 하드웨어에 통신만을 제어하는 최소한의 기능을 수행하는 커널입니다. 우리가 윈도우가 설치된 하드디스크에 윈도우 폴더 밑에 System32 폴더 밑에 Ntoskrnl.exe 파일이 그 역할을 수행하고 있습니다. 윈도우는 완벽한 링 구조를 이루고 있지는 않기 때문에 하드웨어 추상화 계층을 통해서 직접 하드웨어와 통신이 가능합니다. 하지만 직접 하드웨어 추상화 계층을 통해서 통신이 가능하지만 하드웨어 추상화 계층을 직접적으로 연결하지 않고 주변 관리자들이 마이크로 커널을 통해서 하드웨어를 제어하는 그러한 특수한 기능으로도 수행하고 있기 때문에 이러한 이유로 인해서 보안상의 허점이 생긴다는 단점이 존재하고 있습니다. 그다음 윈도우의 관리자 역할을 한번 세세하게 살펴보도록 하겠습니다. 윈도우 관리자는 입출력 관리자, 객체 관리자, 보안참조 관리자, 프로세스 관리자, 로컬 프로시저 호출 관리자, 가상 메모리 관리자, 그래픽 장치 관리자, 기타 관리자가 있습니다. 먼저 input, output을 담당하게 되는 입출력관리자부터 살펴보도록 하겠습니다. 입출력관리자는 장치 드라이버 간의 메시지 전달. 그리고 응용프로그램과 하드웨어 간의 통신과 같은 시스템의 입출력을 제어하는 기능을 수행하고 있습니다. 다음 object manager라 불리는 객체관리자는 윈도우에서는 모든 파일, 포트, 프로세스, 스레드 등 이런 모든 것을 하나의 객체로 정의를 해서 관리합니다. 그래서 객체관리자는 이러한 윈도우에서 정의되어 있는 파일, 포트, 프로세스, 스레드 같은 객체들에 대한 정의된 정보들을 제공해주는 역할을 수행을 하고 있습니다. 다음 보안 참조 관리자 같은 경우에는 데이터 및 시스템 자원의 접근제어를 관리한다는 특징을 갖고 있으며 시스템의 강제 보안 설정을 담당해서 각 데이터나 시스템에 아무 사용자나 즉, 권한을 갖고 있는 사용자만이 접근할 수 있도록 해 주는 그러한 역할을 수행을 하고 있습니다. 다음 프로세스 관리자 같은 경우에는 프로세스 실행을 위해서 스레드를 생성하거나 프로세스가 완료가 되었을 때 스레드를 회수하는 역할을 수행하게 됩니다. 로컬 프로시저 호출 관리자는 실행되는 프로세스 간에 메시지 전달을 담당하는 관리자역할을 수행하게 됩니다. 프로세스들끼리도 서로 데이터를 주고받기 위해서 메시지의 처리를 필요로 하게 되는데 이때 이 역할을 담당하게 되는 것이 로컬 프로시저 호출 관리자입니다. 가상 메모리 관리자 같은 경우에는 응용프로그램의 요청에 따라 메모리를 할당하거나 회수하는 역할 그리고 가상 메모리 페이징을 제어하는 역할을 수행하게 됩니다. 우리가 하드드라이브에 저장되어 있는 응용프로그램이 실제 실행될 때는 운영체제로부터 메모리에 복사되어 실행되게 되는 단계를 이루고 있습니다. 그렇기 때문에 응용프로그램이 메모리의 할당을 운영체제에게 요청 하게 되고 운영체제는 지금 현재 할당해 줄 수 있는 메모리 중 응용프로그램이 필요한 메모리를 할당을 해주거나 또는 응용프로그램이 실행이 종료된 후에 할당된 메모리를 다시 회수하여 다음 응용프로그램이 실행될 수 있도록 도와주는 역할을 하는 또는 응용프로그램이 실행된 후에 더 많은 가상메모리를 요청하게 될 때 가상 메모리의 페이징을 조절하는 역할을 담당하게 되는 것이 가상 메모리 관리자의 역할입니다. 그래픽 장치의 관리자 같은 경우 화면에 선이나 우리가 사용자가 보고 있는 모니터 화면에 선이나 곡선 그리고 폰트를 관리하는 역할을 수행하게 됩니다. 사용자가 input device 즉, 키보드나 마우스를 통해서 어떤 정보를 입력하게 되면 선이나 곡선 또는 키보드로부터 입력된 텍스트를 화면에 출력하게 되는 역할을 수행하게 되는 것이 그래픽 관리자입니다. 그 외의 관리자기능으로써 응용프로그램이나 프로세스가 실행될 때 빠른 로딩처리 및 응답을 위한 캐시 관리자 그리고 컴퓨터시스템에서 새로운 디바이스가 발견되었을 때 장치드라이브를 로드하여 윈도우 시스템에서 사용 가능하도록 만들어주는 Plug and Play 관리자. 절전이나 배터리 지속시간을 늘리기 위해서 현재 사용되지 않는 장치의 일부분의 전원을 차단하거나 소비전력을 최소화시키는 대기상태로 바꾸어서 배터리 지속시간을 늘려주는 역할을 수행하는 이러한 전원관리자 등이 윈도우 관리자의 역할입니다. 윈도우 파일시스템에 대해서 살펴보도록 하겠습니다. 윈도우 파일시스템은 FAT 방식과 FAT32 방식 그리고 NT 파일 시스템 방식이 있습니다. FAT 방식 같은 경우에는 기본 크기가 16비트 크기로써 클러스터 크기가 32KB의 크기를 가지고 있습니다. 그리고 전체 용량이 2GB(기가바이트)까지를 하나의 파티션으로 설정할 수가 있습니다. 하지만 2GB라는 용량은 현재 사용하게 되는 운영체제에 있어서는 작은 용량이기 때문에 이러한 문제점들을 2GB에 최대 할당크기에 대한 한계점을 극복하기 위해서 FAT32 방식이라는 파일 시스템 방식이 윈도우 95 OSR2에서 처음 사용되기 시작합니다. FAT32 방식 같은 경우는 호환성이 굉장히 좋기 때문에 2기종 운영체제 간에 서로 데이터전송을 위해서 많이 활용된다는 장점을 가지고 있으며 현재로서도 맥(MAC)이나 윈도우 또는 리눅스, 유닉스 계열에서 서로 데이터를 주고받기 위한 파일시스템으로 활용되고 있습니다. 다음 NT 파일 시스템 같은 경우에는 사용자가 권한에 따른 접근제어를 적용하고 있습니다. 따라서 파일시스템에 접근하기 위해 사용자의 접근허용권한을 확인하고 사용자가 접근을 했을 때 파일접근에 대한 히스토리를 관리하는 감사기능을 제공하는 특징이 있습니다.
윈도우의 부팅순서
다음으로 윈도우의 부팅순서에 대해서 살펴보겠습니다. 윈도우의 부팅순서는 윈도우 vista 이전 버전과 윈도우vista 이후 버전으로 나누어서 부팅순서를 살펴보도록 하겠습니다. 먼저 윈도우 XP, 윈도우 서버2000, 윈도우 서버2003의 부팅순서를 살펴보겠습니다. POST 실행단계와 CMOS를 통한 기본부팅설정단계, 그리고 Master Boot Record 단계 같은 경우에는 하드웨어에서 처리하게 되는 부팅순서입니다. 그 이후에 윈도우 XP, 윈도우 서버, 윈도우 2003을 위해서 윈도우 NT Loder를 실행하는 단계, 그리고 NTDETECT를 실행하는 단계, NT OS Kernel을 실행하는 단계로 순서를 살펴볼 수가 있겠습니다. POST 실행단계부터 살펴보도록 하겠습니다. POST 실행단계는 처음에 부팅 후에 BIOS에서 POST 실행을 통해서 하드웨어 기반의 기본적인 설정사항을 점검하는 데서부터 시작합니다. 하드웨어에 문제가 발생하게 되면 메인보드에 연결되어 있는 스피커를 통해서 경고음을 울리거나 또는 LED를 점멸하여 사용자에게 하드웨어에 문제가 발생했다고 알려주게 됩니다. 우리가 일반적으로 컴퓨터를 처음 조립하고 난 후에 가장 많이 하는 실수 중 하나가 메모리카드를 잘못 연결하거나 소켓을 잘못 연결하거나 또는 그래픽카드를 잘못 연결하게 되는 경우인데 이때 하드웨어 컴퓨터에 전원을 처음 인가하게 되면 POST 실행단계를 통해서 사용자의 컴퓨터에 메모리가 올바르게 연결되어 있나 또는 그래픽카드가 연결되어 있는지를 알려주게 되는 기능들이 POST 실행단계에서 시작하는 부분입니다. 다음 2단계의 기본부팅설정사항 로드단계에 있어선 POST 실행이 다 끝나고 하드웨어에 문제가 없음을 판단하게 되면 CMOS에 설정된 내용을 읽어 들여서 시스템에 적용하는 단계입니다. BIOS에서 CMOS에 설정되어 있는 시스템 설정사항 및 부팅과 관련된 여러 가지 정보들을 읽어 들여서 시스템에 적용을 하게 됩니다. Master Boot Record 로드 단계에서는 POST 실행과 CMOS 설정에 하드웨어 점검이 끝나면 운영체제를 실행하기 위해서 파티션 섹터라고 불리는 Master Boot Record를 찾아서 해당 파티션에 부트섹터를 호출하는 단계입니다. 보통 첫 섹터, 일반적으로는 섹터 제로라고 불리는 512바이트의 시동섹터를 읽어 들이는 단계부터 시작합니다. 만일 우리가 부팅이 불가능하게 되거나 또는 CMOS에서 지정한 하드드라이브에 운영체제가 설치되어 있지 않다면 사용자의 모니터에 Missing operating system이란 메시지를 출력하여 사용자에게 운영체제가 올바로 설치되어 있지 않거나 또는 하드드라이브를 잘못 선택했다고 알려주는 메시지를 출력하게 됩니다. 다음 4단계 NT Loder를 실행하는 단계입니다. 부트섹터 호출 후에 부팅과정이 실행되도록 윈도우 운영체제에서 NT Loder를 실행을 하게 됩니다. NT Loder 같은 경우에는 텍스트파일로 저장되어 있는 boot.ini 파일의 내용을 읽어 들여서 부팅옵션을 출력하게 됩니다. 그림에서 살펴보면 총 2개의 운영체제가 설치되어 있다는 것을 우리는 알 수가 있습니다. 먼저 첫 번째로 Window 2000Pro와 두 번째로 Windows NT Server 4.0버전이 설치되어 있음을 operating system 옵션을 통해서 알 수가 있고 다음 부트로더 옵션을 통해서 사용자에 설치되어 있는 운영체제 중에서 파티션3에 NT 즉, Window 2000Pro 부팅을 기본적으로 지원을 하고 있으며 이때 사용자 대기시간은 30초로 정의되어 있다는 것을 알 수가 있습니다. 윈도우 부트옵션을 출력한 후에 부팅이 실행되게 되면 운영체제에서 NTDETECT.com을 실행을 하게 됩니다. 이 NTDETECT를 실행하면서 컴퓨터에 연결되어 있는 하드웨어들을 검사해서 주변 하드웨어장치들의 정보를 하나의 레지스트리 하드웨어 키로 묶게 됩니다. 이것을 우리는 레지스트리 하드웨어 키라고 얘기를 하고 이때 단계를 NT DETECT를 통한 레지스트리 하드웨어 키 생산단계라고 얘기합니다. 다음 6단계로 NT OS Kernel을 실행하는 단계입니다. NT OS Kernel이라고 불리는 ntoskrnl.exe 파일을 실행해서 하드웨어 추상화 계층 레이어를 로딩하게 됩니다. 하드웨어 추상화 레이어는 커널 로드, 커널 초기화, 서비스 로드, 서브시스템 시작의 순서로 동작을 하게 됩니다. 먼저 커널 로드부분을 살펴보면 레지스트리 하드웨어 키라고 불리는 레지스트리 정보 밑에, 레지스트리 하드웨어 키 정보 밑에 저장이 되는 부분입니다. 설정로드 후에 여기에 하드웨어에 대한 정보를 저장하고 이 정보를 통해서 로드할 드라이브와 로드하게 되는 드라이브와 순서를 결정을 하게 됩니다. 다음으로 커널 초기화를 통해서 드라이브에 대한 현재의 제어 설정을 검사하고 초기화를 진행하는 작업을 시작하게 됩니다. 다음 서비스 로드단계입니다. 서비스 로드단계에서는 세션 관리자 서브 시스템, 우리가 smss.exe 파일을 실행한 후에 그다음에 Window32 서브 시스템을 로드하는 단계입니다. 마지막으로 서브 시스템을 시작하게 되면 Window32 서브 시스템을 통해서 사용자가 운영체제를 통해서 하드웨어를 제어할 수 있게끔 운영체제에 로그인하는 이러한 시스템 로그인 인증을 시작하는 단계로 우리가 진행하게 되겠습니다. 윈도우 vista 이전에 운영체제가 앞서 살펴본 이러한 단계로 실행을 했다면 윈도우 vista 이후의 운영체제는 조금은 다른 단계로 실행을 하게 됩니다. 앞서 살펴본 POST 실행단계, 그리고 CMOS를 통한 기본부팅관련 설정사항 로드단계. 그리고 Master Boot 로드단계는 윈도우 XP를 로드하는 단계와 윈도우 vista 이전 버전인 윈도우 XP, 윈도우 2003, 윈도우 2000 버전의 부팅순서단계와 동일합니다. 이유는 1, 2, 3, 단계 같은 경우에는 윈도우 운영체제에서 제공하는 부팅단계가 아니라 우리가 사용하는 컴퓨터 시스템에서 제공하는 부팅단계이기 때문에 기본적으로 운영체제를 호출하기 이전 단계로 분류하여 동일한 순서로 진행하게 됩니다. 다시 한 번 더 내용을 살펴보게 되면 POST 실행단계에 있어서는 BIOS에서 POST를 실행을 하게 됩니다. 그런 다음 하드웨어에 연결되어 있는 주변 메모리 또는 그래픽카드 또는 기타 하드웨어 디바이스들이 올바르게 작동을 하는지 또는 문제가 발생을 하지 않는 범위 내에서 사용할 수 있는지를 확인하는 하드웨어 기반의 기본적인 사항을 점검을 실행을 하게 되고 2단계, POST 실행단계가 완료된 후에 문제가 없을 경우에 이 바이오스에서 CMOS의 설정되어 있는 시스템 설정사항 및 부팅과 관련된 여러 가지 정보를 읽어 들여서 시스템에 적용하게 됩니다. 부팅과 관련된 여러 가지 정보를 적용한 후에 Master Boot Record를 로드하게 되는데 Master Boot Record 같은 경우에는 아까 말씀드렸다시피 저장매체의 첫 번째 섹터 0에 저장되어 있으며 512바이트의 영역으로 부팅매체에 대한 기본적인 파일시스템 정보를 보관하고 있습니다. 그리고 만일 운영체제가 올바르게 설치되어 있지 않거나 또는 사용자가 CMOS에 정의한 내용 중에 운영체제를 지칭하는 Master Boot Record가 올바르게 로딩 되지 않는 경우에 있어서는 Missing operating system이라는 메시지를 화면에 출력하여 사용자에게 오류를 알려주게 됩니다. 다음 4단계 실제 윈도우 vista 이후에 윈도우 vista, 윈도우 2008, 윈도우 7의 부팅순서를 살펴보도록 하겠습니다. 윈도우 부트 매니저를 통해서 실행되는 윈도우 부트 서브시스템 실행단계는 부트 설정 데이터라는 Boot Configuration Data를 읽어 들여 실행 가능한 운영체제를 목록을 출력하는 단계부터 시작하게 됩니다. 윈도우 vista 이전단계에 있어서 윈도우 XP, 윈도우 서버 2000, 윈도우 서버 2003에서는 텍스트파일로 저장되어 있는 boot.ini 파일의 내용을 출력하여 실행될 운영체제의 목록을 출력하여 사용했습니다. 때문에 boot.int 파일은 텍스트파일로 되어 있기 때문에 사용자가 운영체제 부팅 후에 메모장 같은 텍스트편집 툴을 이용해서 편집하는 것이 가능했지만 윈도우 vista 이후에 윈도우 vista, 윈도우 2008, 윈도우 7 같은 경우에 있어서는 Boot Configuration Data 같은 경우에 텍스트파일이 아니기 때문에 bcdedit라는 별도의 편집기를 통해서 편집을 해야 하는 특징이 있습니다. 다음 5단계 윈도우 OS 로더 실행단계입니다. 윈도우 OS 로더 실행단계는 각종 장치드라이브를 로드하고 NT OS Kernel을 실행하는 단계입니다. 이전 윈도우 시스템에서 NTDETECT가 하는 역할과 동일하다고 볼 수 있으며 이후에 NT OS kernel인 ntoskrnl.exe 파일을 실행을 하게 됩니다. 윈도우버전의 운영체제에 대한 부팅순서 특징을 조금 더 간략하게 정의해 보도록 하겠습니다. 윈도우 부팅순서는 하드웨어에서 수행하는 POST 실행단계, 그리고 CMOS 설정단계, CMOS에서 설정된 내용을 적용하는 단계 그리고 Master Boot Record를 찾아서 읽어 들이는 단계는 윈도우 운영체제, 모든 운영체제가 동일합니다. 이유는 하드웨어에서 처리를 해서 수행하는 단계이기 때문입니다. 하지만 이후에 실제 사용자의 하드 드라이버에 설치된 운영체제의 정보를 읽어드리는 부분은 조금은 상이합니다. 윈도우 vista 이전에 윈도우 XP, 윈도우2000, 윈도우2003 버전 같은 경우는 부팅옵션을 보여주기 위해서 boot.ini라는 파일을 읽어 들여서 NT 로더를 읽어 들여서 운영체제의 목록을 출력했으며 이후에 NT 로더를 실행하고 NT DETECT를 통해서 장치드라이브 및 NT OS kernel을 불러들이는 과정을 수행했습니다. 하지만 이에 반면에 윈도우 vista 이후 버전에선 윈도우 vista, 윈도우 2008, 윈도우 7 이 버전 이후 버전에서는 윈도우 부트 매니저라는 윈도우 Configuration Data를 통해서 운영체제의 목록을 출력했으며 그 후에 윈도우 OS 로더를 실행해서 장치 드라이브 및 윈도우 OS Kernel을 불러들이는 과정을 수행을 하였습니다.

 

 

학습정리

1. 윈도우 시스템은 ‘하드웨어 > 하드웨어 제어를 위한 HAL(Hardware Abstraction Layer) > 마이크로 커널 > 각종 관리자 > 운영체제에서 동작 가능한 응용 프로그램’의 링 구조를 이룬다.


2. 윈도우 파일 시스템의 종류는 FAT, FAT32, NTFS가 존재한다.

 


3. 리눅스/유닉스에 대한 이해


 

학습목적

- 유닉스/리눅스의 역사에 대해 알아본다.
- 유닉스/리눅스의 구조에 대해 알아본다.
- 유닉스/리눅스의 부팅순서에 대해 알아본다.

학습목표

- 유닉스/리눅스의 구조 및 부팅 순서에 대해 설명할 수 있다.

 

 

■ 주요용어

 

BSD(Berkeley Software Distribution)

BSD(Berkeley Software Distribution)는 1977년 미국 캘리포니아 대학교 버클리(University of California, Berkeley)에서 개발한 유닉스 계열의 컴퓨터 운영 체제이다. 버클리의 최초의 유닉스 시스템은 1974년 설치된 PDP-11이며 컴퓨터 과학부는 그 뒤 대형의 연구를 위해 이를 사용하였다. 최초의 버클리 소프트웨어인 1BSD는 1978년 3월 9일 출시되었다.

POSIX

서로 다른 UNIX OS의 공통 API를 정리하여 이식성이 높은 유닉스 응용 프로그램을 개발하기 위한 목적으로 IEEE가 책정한 애플리케이션 인터페이스 규격이다. POSIX의 마지막 글자 X는 유닉스 호환 운영체제에 보통 X가 붙는 것에서 유래한다. 규격의 내용은 커널로의 C 언어 인터페이스인 시스템 콜 뿐 아니라, 프로세스 환경, 파일과 디렉터리, 시스템 데이터베이스(암호 파일 등), tar 압축 포맷 등 다양한 분야를 아우른다. 유닉스 계열 외에 마이크로소프트 윈도 NT는 POSIX 1.0에 준하는 POSIX 서브 시스템을 탑재하고 있으며, POSIX 응용 프로그램을 서브 시스템에서 실행할 수 있다. 이는 주로 미국 정부기관의 컴퓨터 시스템 도입조건(FIPS)에서 POSIX 준거할 것을 요구하기 때문이다. 윈도 2000까지 POSIX 서브시스템을 탑재하고 있었지만 윈도 XP에서 폐지되었다. 이후 Windows 2003 R2 부터 POSIX 2.0에 준하는 Subsystem for UNIX-based Applications(SUA)를 통해 POSIX를 지원하고 있다.

 

■ Think.

리눅스 부트로더인 LILO(Linux Loader)와 GRUB(GRand Unified Bootloader)의 차이점에

대해서 생각해보자.

 

의견

LILO는 텍스트 인터페이스를 통해서 메뉴를 제공하며 관리자가 설정 파일을 수정하는 것 외에도 많은 작업이 필요하다. 이에 비해서 GRUB은 부팅시에 /boot/grub/grub.conf를 알아서 처리해주기 때문에 관리가 편하며 “grub-install” 유틸리티로 GRUB을 설치한다. 변경된 grub.conf는 다음 부팅시에 자동으로 적용되지만 lilo.conf는 MBR을 새로고침 해야만 다음 부팅시에 적용이 가능하다. GRUB은 MD5를 암호 부호화에 사용하지만 LILO는 평문 암호화를 사용하기 때문에 “cat /etc/lilo.conf” 명령으로 내용을 볼 수 있다.

 

 

시스템보안개론 1주차 3차시 리눅스/유닉스에 대한 이해를
시작하도록 하겠습니다. 우리가 다소 생소한 운영체제이긴

하지만 리눅스/유닉스같은 경우는 시스템보안을 위해서
필수적으로 이해해야 되는 운영체제라고 볼 수 있겠습니다.

먼저 유닉스/리눅스의 역사에 대해서 살펴보도록 하겠습니다.
유닉스는 초기 유닉스의 시초라고 하면 멀틱스(Multics)를

얘기를 할 수가 있겠습니다. 멀틱스 같은 경우에는 MIT,
General Electric사, 벨연구소가 3년 동안 공동연구를 통해서

개발한 시분할 운영체제입니다. 멀틱스 같은 경우에는
미 국방성인 알파에서 지원해서 추진된 프로젝트로써

GE에서 하드웨어를 생산하고 하드웨어를 기반으로 해서
Programming Language1이라는 언어를 통해서 개발합니다.

이후에 벨연구소에서 멀틱스에 대한 연구를 중지하게 됩니다.
그리고 나자 벨연구소에 있던 데니스 리치(Dennis Ritchie)랑

켄 톰슨(Ken Thomson)이라는 사람이 함께 멀틱스의
개념을 통해서 다시 이것들을 구현하기 위한 목적을 가지고

운영체제에 대한 연구를 시작하게 됩니다. 그때 시작하게 된
운영체제가 PDP-7이라는 운영체제입니다. PDP-7에는

파일 시스템 구성의 개념, 사용자가 명령을 내려서
바로 실행하게 되는 명령어 인터프리터의 개념.

명령어 해석자라고 얘기하기도 하죠. 그리고 각 명령이
새로운 프로세스를 형성해서 실행하도록 하는

이러한 멀티프로세스의 개념들이 모두 포함되어 있으며
이후에 유닉스라는 이름으로 불리게 됩니다.

1973년도에 C언어로 다시 유닉스를 다시 제작을 하게 되며
이때 제작된 유닉스는 C언어로 제작되었기 때문에

하드웨어에 맞는 범용성을 가지기 시작하며 다양한 하드웨어를
지원하기 시작합니다. 그래서 1970년대 말에 버클리 대학교에서

이 AT&T연구소로부터 유닉스 소스 코드를 구입해서 후에
빌 조이(Bill Joy)랑 척 핼리(Chuck Haley)라는 사람이

Free BSD, 일반적으로 Berkeley Software Distribution이라는
BSD라 불리는 운영체제로 명명하는 계량된 운영체제를

계속적으로 개발을 하여 이후에 50달러의 가격으로 판매를
하게 됩니다. 다음 보시는 그림은 유닉스의 발전과정을

보여주고 있습니다. 리눅스 같은 경우에는 유닉스가
일반 대학교나 연구소에서 사용하기가 굉장히 어려울 정도로

비쌌기 때문에, 고가의 운영체제였기 때문에 학생들이 쉽게
사용을 할 수 있도록 이를 흉내 내기 위한

Emulator로 제작된 미닉스에서 부터 아이디어가 시작됩니다.
필란드에 있는 헬싱키 대학에서 유닉스 실습을 위해서

Andrew Tanenbaum이라는 교수가 제작한 Emulator인
미닉스에서 아이디어를 얻어서 당시 대학생이던

Linus Torvalds가 이것들을 X86 컴퓨터에서 동작할 수 있는
유닉스를 흉내 낸 것이 아니라 유닉스에 갖춘 모든 기능들,

개념들을 X86 컴퓨터에서 구현하겠다는 목적을 가지고
처음에 개발된 커널로부터 시작됩니다. 1991년 9월 17일 날,

처음 공개한 0.01버전을 시작으로 해서 현재 전 세계에
수많은 수천만의 개발자들이 리눅스 개발에 자발적으로

참여하고 있으며 현재까지도 계속 발전하고 있는 단계입니다.
리눅스는 유닉스의 표준 인터페이스라고 할 수 있는

POSIX 표준을 그대로 적용을 하고 있습니다. POSIX 1 같은
경우에는 핵심으로써 운영체제의 인터페이스를 담당하고 있고

POSIX 2는 셀과 툴, 사용자 명령을 담당하고 있습니다.
POSIX 3는 표준 규격의 적합성을 검증하는 방법에 대해

다루고 있으며 POSIX 4는 실시간 POSIX 확장을 위한
개념을 포함하고 있습니다. POSIX 5는 에이다 언어,

그리고 POSIX 6는 보완기능을 포함해서 관리를 하고 있습니다.
이 POSIX라는 것은 이식 가능한 운영체제 인터페이스의

약자입니다. 우리가 Portable Operating System Interface라고
부르죠. 이식 가능한 운영체제의 인터페이스의 약자로써

서로 다른 unix operating system, 공통적인 API를 정리하여
이식성이 높은 유닉스 응용프로그램을 개발하기 위한 목적으로

아이트리프에서 책정한 어플리케이션 인터페이스
표준규격입니다. 그래서 POSIX의 마지막 글자 X는

유닉스 호환 운영체제에 일반적으로 X가 붙는 것으로부터
유례를 하게 됩니다. POSIX의 이러한 규격에 대한 내용은

커널로써의 C언어 인터페이스인 시스템 콜뿐만 아니라
프로세스 환경 그리고 파일과 directory, 시스템 데이터베이스,

아무 파일을 말할 수가 있겠죠. 이런 것들에 대한 표준,
그리고 압축 포맷. 다양한 분야를 함께 통틀어서

규격으로 다루고 있습니다. 유닉스 계열 이후에도
마이크로 윈도우 NT 같은 경우에는 POSIX 1.0에 준하는

POSIX 서브 시스템을 탑재를 하고 있으며
POSIX 응용프로그램을 서브시스템에서 실행할 수 있도록

준비가 되어 있습니다. 이는 주로 미국정부기관에 표준시스템
도입조건에서 POSIX를 도입하기를 POSIX 규격을 준하도록

권고하고 있기 때문입니다. 그래서 윈도우 2000 시스템까지는
POSIX 서브 시스템을 탑재하고 있었는데

이후에 윈도우 XP에서는 폐지가 되었습니다.
그리고 윈도우 2003 R2부터, 릴리즈버전 2부터

POSIX 2.0에 맞는, 거기에 해당하는 규격에 준하는
Subsystem for Unix-Based Applications.

SUA라고 불리는 유닉스 기반의 어플리케이션을 위한
서브시스템을 윈도우에 도입하여 POSIX를

향후 폭넓게 지원을 하고 있는 추세입니다. 
다음으로는 유닉스/리눅스의 구조에 대해서 살펴보도록
하겠습니다. 윈도우의 링 구조가, 우리가 앞서 2차시에 살펴봤던

윈도우의 링 구조 가 하드웨어, 하드웨어를 위한
하드웨어 추상화 계층 그리고 마이크로 커널, 셸,

응용프로그램으로 구성된 반면에 리눅스/유닉스 링 구조는
하나 더 적은 하드웨어, 커널, 셸, 데몬을 포함한

응용프로그램으로 구성되어 있습니다. 하드웨어 추상화 계층이
빠져있겠죠. 따라서 리눅스/유닉스 링 구조가 윈도우보다

좀 더 명확하게 구분이 되도록 나누어져 있기 때문에
레이어가 하나 더 적다하더라도 더 높은 보완성을

유지하고 있다는 특징을 가지고 있습니다. 리눅스/유닉스의
커널 구조는 윈도우보다는 좀 더 단순합니다. 파일 시스템,

장치 드라이버 그리고 프로세스 제어로 나누어져 있으며
커널 크기 또한 윈도우의 마이크로 커널보다도

최대 3분의 1 정도의 수준으로 굉장히 작은 크기를 유지를
하고 있습니다. 커널에 이러한 프로세스 제어라든지

장치 드라이버, 파일 서브 시스템의 제어에 대해서 살펴보면
커널의 프로세스 제어는 전체 프로세스 간의 통신을 담당하고

프로세스 간의 스케줄링, 메모리 관리를 구현하며 다음으로
장치 드라이버는 하드웨어와 소프트웨어를 연결해주는

인터페이스를 제공합니다. 파일 서브 시스템 같은 경우에는
저장 공간에 유닉스파일의 저장하고 읽는 역할을

수행하게 됩니다. 리눅스/유닉스에서 셸은 굉장히 중요한 역할을
수행하게 됩니다. 이유는 리눅스/유닉스에서 셸을 통해서

대부분의 명령을 실행할 수 있다는 특징이 있기 때문입니다.
따라서 우리가 시스템 보안적인 측면에 있어서

리눅스/유닉스의 해킹에서 관리자 권한을 획득한다고
얘기한다는 것은 관리자 권한의 셸을 획득한다는 것을

의미합니다. 이것은 굉장히 필수적인 중요한 요건이겠죠.
셸은 다양한 종류가 있으면서 그중에서도 유닉스 버전7의

기본 셸인 본셸 그리고 콘셸, C셸이 대표적입니다. 셸은
응용프로그램에서 명령을 받아서 커널에 전송하는 기능,

사용자의 키보드입력을 인식해서 즉, Input device인
키보드로부터 명령을 받아들여서 처리하는 기능.

그리고 사용자가 입력한 명령들을 해당 프로그램을 수행하는
기능들을 수행하는 것을 큰 목적으로 하고 있습니다.

셸의 기능에 대해서 좀 더 자세하게 살펴보면 셸은 자체적인
내장 명령어를 포함하여 사용자가 사용할 수 있도록

제공을 하고 있습니다. 예를 들어서 우리가 파일의 내용을
보고 싶다고 하면 list의 약자인 ls를 통해서 즉, 셸에서 ls라는

키보드 입력을 통해서 파일의 내용들을 출력해서 볼 수가
있다거나 또는 복사하는 cp, 카피 명령을 실행하는 것들을

우리는 자체의 내장 명령이라고 얘기할 수가 있겠죠.
입력, 출력, 오류, redirection의 방향을 결정하는 기능 또한

수행을 하고 있습니다. 와일드카드라든지 파이프라인,
이러한 것들을 실행하는, 처리하는 기능을 수행하고 있으며

조건부 또는 무조건부로 명령열을 작성하는 이런 기능들 또한
셸의 가장 중요한 기능 중의 하나입니다.

그리고 셸 그 자체적으로 실행되는 명령뿐만이 아니라
서브 셸을 실행하여 이것들을 통해서 다른 특수한 명령들을

수행을 하거나 또는 사용자로부터 입력을 받아들일 수 있는
기능이 있습니다. 사용자가 실행된 입력한 명령을 통해서

실행된 프로그램 및 foreground 또는 background,
사용자가 인지하지 않고 뒤에서 처리하게 되는

background 처리 기능 또한 셸의 기능입니다. 그리고
셸 스크립트라는 프로그래밍 작성을 통해서

자동화 처리를 할 수 있는 기능들을 포함을 하고 있습니다.
다음 리눅스/유닉스 시스템에서 사용하고 있는

파일시스템의 구조에 대해서 생각해 보겠습니다.
리눅스/유닉스에서의 파일시스템은 일반 파일, 디렉터리 파일,

특수 파일 그리고 파이프 파일로 나누어지게 됩니다.
리눅스/유닉스에서는 이러한 파일들이 모두 다 디렉터리라든지

일반 파일, 특수 파일, 파이프라인 파일들이 모두 다
하나의 파일이라는 개념으로 처리가 된다는 특징을 갖고 있으며

그중에서 일반 파일 같은 경우에는 텍스트 파일,
이미지 파일, 실행 파일 등과 같은 우리가 사용하고 있는

일반적인 파일들을 의미합니다. 디렉터리는 윈도우에서는
디렉터리를 하나의 저장 공간이라는 개념으로 사용하겠지만

리눅스/유닉스 시스템에서는 파일의 개념으로 사용을 하게
됩니다. 따라서 디렉터리가 가지고 있는 여러 파일과

파일 디렉터리의 파일 정보들을 담고 있다는 특징이 있겠죠.
일반 파일 같은 경우 우리가 살펴본 텍스트 파일, 이미지 파일,

실행 파일. 그런 파일들과는 다르게 디렉터리는 디렉터리가
담고 있는 파일, 여러 가지의 파일과 하위 디렉터리의 정보들을

같이 포함하고 있다는 것을 기억해 두시기 바랍니다. 다음은
특수 파일입니다. 말씀드렸다시피 리눅스/유닉스 시스템에서는

모든 디바이스장치들이나 파일들을 하나의 디렉터리라든지
이런 것들을 하나의 파일시스템 개념으로 다루기 때문에

장치에 대한 즉, 프린터라든지 하드웨어, 사운드카드,
그래픽카드 이러한 모든 장치들 또한 하나의 특수 파일들로

다루고 있습니다. 그래서 일반적으로 최상위 디렉터리 밑에
dev라는 디바이스 파일 폴더 밑에 우리가 물리적인 장치에

접근하기 위한 파일들의 정보를 담고 있습니다. 그래서 음악을
재생하고 싶다고 한다면 윈도우에서는 해당하는 응용 프로그램

실행을 통해서 마이크로 커널이나 하드웨어 추상화를 통해서
음악을 재생하게 되는 사운드카드를 접근하게 되지만

리눅스/유닉스 시스템에서는 직접적으로 음악파일을
사운드카드에 해당하는 dev의 밑에 오디오라는 파일에

입력을 해주면 컴퓨터 스피커를 통해서 소리가
재생될 수 있다는 개념을 가지고 있습니다.

다음 파이프 파일을 생각해 보면 파이프 파일은
우리가 키보드에서 원자로 표시되어 있는 부분의 윗 문자를

말하고 있습니다. 그래서 동시 실행할 수 있는 그러한 명령을
사용할 때 동시에 2개 이상의 명령을 연결해서 사용할 때

사용하는 파일 시스템 문자입니다. 이때에 파이프파일을 통해서
2개 이상의 프로그램을 실행을 하게 되면 임시파일이

생성이 되었다가 다음에 프로그램이 종료된 후에 임시파일이
사라지게 됩니다. 이때 임시파일이 생성되었다가 사라진다는

시스템 상의 특징을 이용해서 파이프 라인을 이용해서
해킹에 사용된다는 보안적인 문제점도 발생을 하게 됩니다.

이 부분은 추후에 좀 더 자세하게 다뤄보도록 하겠습니다.
다음 보시는 그림이 유닉스/리눅스의 디렉터리 구조입니다.

리눅스/유닉스 시스템의 디렉터리별 역할을 좀 더 자세하게
살펴보도록 하겠습니다. 먼저 최상위 디렉터리를 기준으로

bin폴더, etc폴더, tmp, lib, boot, dev, home, usr
이 폴더를, 파일시스템 구조를 살펴볼 수 있으며

bin 같은 경우 binary의 약자로서 기본적으로 실행 가능한
파일들을 담고 있는 폴더입니다. echo라든지

파일을 옮기기 위한 move, mv. 그리고 파일을 복사하기 위한
copy 명령어, 그리고 현재 사용자가 위치해 있는

위치경로를 알려주는 pwd. 그리고 현재 로그인한 사용자가
누구인지, 로그인 사용자에 대한 간단한 정보를 알려주는

who 명령어 등이 bin폴더에 위치하고 있습니다.
다음 etc폴더에는 시스템의 환경설정 및 주요 설정파일들을

담고 있습니다. 사용자의 비밀번호가 저장되어 있는 패스워드.
그리고 hosts, 데몬 실행을 위한 xined.conf 이런 파일들이

ect 밑에 담겨져 있습니다. 그리고 tmp는 temporary,
임시폴더라고 얘기를 하겠습니다. 프로그램실행이나 또는

설치할 때 사용되는 임시파일들을 보관했다가 활용할 수 있는
경로이며 이 디렉터리에 파일을 저장하게 되면 재부팅 시에

임의로 리눅스/유닉스 시스템이 판단하여 파일을 삭제하는
그러한 문제가 발생하는 경우가 있습니다. 하지만 이것들은

정상적이므로 사용자가 그때그때 필요에 따라서 임시파일을
활용한다든지 또는 정말 중요한 파일인 경우에 사용자폴더나

또는 다른 폴더를 이용해서 파일을 보관해야 되는 주의점을
기억해 두시기 바랍니다. 다음 library 폴더 같은 경우는

기본 프로그램의 모듈을 담고 있는 폴더입니다. 그다음에
부트 폴더는 커널에서 실행하기 위한, 커널을 위한

프로그램 파일 정보들을 담고 있으며 윈도우,
리눅스/유닉스 시스템에서 부팅이 실행된 후에

이런 부팅에 대한 관련된 파일들이, 정보들이 담겨져 있는
폴더입니다. 다음 장치드라이버를 위한 dev 폴더가 있습니다.

device folder의 약자겠죠. 아까 말씀드렸다시피 오디오 폴더나
프린터, 터미널 같은 물리적인 장치를 다루기 위한

특수 파일들을 담고 있으며 기타 주변 하드웨어들에 대한
정보들을 같이 포함하고 있습니다. home 폴더는 각 사용자의

작업 디렉터리를 나타냅니다. home 폴더 밑에 사용자의
아이디로 이루어진 디렉터리에 자신의 작업 디렉터리가

시작 디렉터리로 지정되게 되어 있습니다. 다음 usr 폴더는
user 폴더입니다. 사용자가 직접 쓰는 파일을 담고 있으며

다른 디렉터리에 파일이 똑같이 위치하고 있는 것이 많은데
이 부분은 링크를 통해서 폴더에서 실행할 수 있도록

만들어 주기 때문입니다. user library 같은 경우에는
C언어나 포트란 또는 다른 어떤 언어들이 사용할 수 있는

library 파일을 담고 있으며 usr include 파일에는
library 파일과 같이 활용될 수 있는

헤더 파일에 대한 정보를 담고 있습니다.

 

다음으로 유닉스/리눅스의 부팅순서에 대해서 살펴보겠습니다.
리눅스/유닉스의 부팅순서는 1단계 POST 실행단계,

2단계인 기본부팅 설정사항 로드단계, 하드웨어에서 불러들이는
Master Boot Record 로딩하는 부분, 이 3단계 같은 경우에는

하드웨어에서 처리하는 부분이므로 이전에 설명 드렸던
윈도우부팅 단계인 1단계, 2단계, 3단계와 동일합니다.

다시 한 번 더 1단계, 2단계, 3단계를 살펴보면
POST단계에 있어서는 리눅스/유닉스 시스템이 처음에,

하드웨어 시스템이 처음 부팅을 시도하게 되면 BIOS에서
포트 실행을 통해서 하드웨어 기반에 기본적인 사항을

점검하는 것에서부터 시작하게 됩니다. 그리고 점검이
완료가 된 후에 점검이 되는 도중에 하드웨어에

문제가 있게 되면 스피커의 알람이나 또는 컴퓨터의
LED점멸을 통해서 사용자에게 하드웨어 문제점을 알려주며

하드웨어에 문제가 없을 경우에는 그다음 단계인
CMOS설정에서 되어 있는 이 설정내용을 불러들여서

시스템에 적용을 하게 됩니다. 다음 3단계,
Master Boot Record 단계에 있어서는 우리가 첫 섹터에,

섹터 0번지에 있는 첫 섹터 512바이트의 시동섹터 정보를
읽어 들여서 리눅스/유닉스 시스템이 부팅이 되도록

도와주는 역할을 수행하게 됩니다.
그다음에 리눅스/유닉스 시스템에 있어서는 다음 4단계로

Master Boot Record를 읽어드리면 운영체제에 대한
부팅이 실행되면서 부트 로더를 처음 실행하게 됩니다.

리눅스에서 운영체제의 커널이미지를 로드하는 부트 로더는
LILO라든지 GRUB, 이 두 가지를 사용을 하게 되는데

LILO 같은 경우에는 리눅스 로더의 약자로써 etc 밑에
lilo.conf라는 파일의 정보를 읽어 들여서 출력하게 됩니다.

GRUB은 etc밑에 grub.conf라는 파일의 정보를 읽어 들여서
출력합니다. 현재에는 설정이 간단하고 다양한 설정을

지원하고 있으며 그래픽적인 요소를 제공하고 있는 GRUB이
부트 로더로써 많이 사용이 되고 있습니다. LILO 같은 경우는

텍스트 인터페이스를 통하다보니까 사용자가, 관리자가 내용을
수정하는 것도 굉장히 복잡하고 많은 작업들이 필요합니다.

이에 반해서 GRUB 같은 경우에는 부팅 시에
부트 디렉터리 밑에, GRUB 밑에 grub.conf라는 내용을

알아서 처리해 주기 때문에 관리가 간편하며 또한
GRUB install이라는 유틸리티를 통해서 GRUB을

설치할 수 있기 때문에 유지보수라든지 실행, 설정단계가
굉장히 편합니다. 하지만 GRUB에 대한 설정파일인

grub.conf에 대한 내용을 변경하였다면 이것을 시스템에
다시 운영체제에 적용을 하기 위해서는 LILO 같은 경우에는

Master Boot만 새로고침을 해서 처리하면 간단하지만
GRUB 같은 경우에는 금방 바로 수정한 후에 다시 재실행 없이

적용이 가능하다는 특징들, 여러 가지 특징들 때문에
LILO에 비해서 GRUB이 현재 사용자로부터 더 많은 사용이

요구되고 있는 추세입니다. 5단계 실행레벨에 따른
서비스 실행 단계를 살펴보도록 하겠습니다.

부트 로더 같은 경우에는 스와퍼(Swapper)라는 프로세스 아이디
0번 프로세스를 실행한 후에 다시 프로세스 1번,

우리가 init라는 프로세스를 실행하는 단계로 진행됩니다.
init 프로세스 같은 경우에는 etc 밑에 init, inittab이라는

파일을 읽어 들여서 부팅할 기본모드를 선택하게 됩니다.
실행 레벨 선택 이후에 시스템초기화 스크립트인

rc.sysinit 실행파일을 실행하고 이후에 실행레벨에 따른 데몬을
실행합니다. 이 rc.sysinit 같은 경우 시스템초기화 스크립트가

실행된 후에 실행레벨에 따른 데몬을 실행을 하게 되는
데몬들은 etc 밑에, rc.d 밑에 존재하게 됩니다.

예를 들어서 실행레벨 5인 경우에 있어서 etc 밑에, rc.d 밑에
rco.d라는 내용이 순차적으로 실행됩니다. inittab 파일을

좀 더 자세하게 살펴보도록 하겠습니다. 부팅할 기본모드를
선택해서 그에 따른 환경을 제공하는 분기점이라고

얘기할 수 있겠습니다. 실행레벨 0번 같은 경우에 있어서는
시스템을 종료하기 위해 사용됩니다. 따라서 이 부분을

설정하지 말 것을 권고하고 있습니다. 왜냐하면 처음에
inittab에서 실행레벨 0번이 설정되어 있으면 시스템이

계속적으로 시스템 실행, 다시 종료, 시스템 실행, 종료가
되기 때문에 운영체제 사용이 불가능하다고 볼 수 있겠습니다.

다음 실행레벨 1번 같은 경우는 단일사용자 모드를 위해서
사용됩니다. 단일사용자 모드 같은 경우는 시스템 복구라든지

관리자 권한의 셸을 통해서 시스템 관리자의 비밀번호를
재설정한다거나 이러한 부분을 하기 위해서 사용되는

실행모드입니다. 실행모드 2번은 멀티유저, 다중유저를
지원을 하며 네트워크 파일시스템은 사용하지 않는 기능입니다.

네트워크 파일시스템은 실행레벨 3번에서 제공을 하고 있는
기능입니다. 실행레벨 3번 같은 경우에는 우리가 일반적으로

사용하고 있는 실행레벨입니다. 다중 멀티유저를 지원하고
있으며 그다음에 네트워크 파일시스템을 지원을 통해서

네트워킹 환경을 사용자에게 제공할 수 있다는 특징을
가지고 있습니다. 실행레벨 4번은 사용이 되지 않고 있습니다.

실행레벨 5번 같은 경우에는 실행레벨 3번에
실행레벨 다중사용자를 지원하는 부분과 네트워크 파일시스템을

지원하는 부분, 이 부분에 더해서 사용자에게
Graphic User Interaction 즉, gui를 지원할 수 있는

부분이 포함됩니다. 실행레벨 6번은 시스템을 재실행하는
부분이므로 실행레벨 0과 같이 계속적인 재부팅이

지원이 되기 때문에 처음부터 이 부분은 사용하지 말 것을
권장을 하고 있습니다. 이것에 대한 좀 더 자세한 내용들을

표로 다음과 같이 정의를 해 놓았습니다. 

 

학습정리

1. 리눅스/유닉스 시스템은 ‘하드웨어 > 커널 > 셸 > 응용 프로그램’의 링 구조를 이룬다.


2. 리눅스/유닉스의 파일 시스템의 종류는 일반 파일, 디렉터리, 특수 파일, 파이프 파일이 있다.