[System] 운영체제 이해
(1) 운영체제 개념
1-1. 운영체제
-
사용자가 컴퓨터 시스템을 손쉽게 사용하도록 하고, 시스템 자원(기억 장치, CPU, 입출력 장치, 정보, 네트워크 등)을 효율적으로 관리할 수 있도록 하는 프로그램 집합
-
프로그램의 프로세스 생성과 메모리 접근 등 서로 충돌 없이 요구를 잘 실행하도록 도와주는 역할
1-2. 운영체제 기능
-
사용자 명령 인터페이스(UCI)를 중심으로 메모리 관리자, 프로세서 관리자, 장치 관리자, 파일 관리자 등 네 가지 서브 시스템 관리자로 기본 구성
1-3. 사용자 명령 인터페이스 (User Command Interface)
-
사용자와 시스템의 대화 수단
-
많은 운영체제에서 GUI를 적용하기에 아이콘과 메뉴, 마우스라는 인터페이스를 이용, 시스템과 대화
(2) 서브시스템 관리자
2-1. 메모리 관리자
-
프로그램이 메모리를 요청하면 적합성 점검 & 적합하다면 메모리 할당
-
할당된 메모리를 다른 프로그램이 접근하지 못하게 관리 & 보호
-
프로그램이 종료할 떄는 할당된 메모리 회수
2-2. 프로세서 관리자
-
명령어들을 쳬계적이고 효율적으로 실행할 수 있도록 작업 스케줄링
-
사용자의 작업 요청을 수용 & 거부
2-3. 장치 관리자
-
프린터, 디스크 드라이버, 모뎀, 모니터 등 시스템 안의 모든 장치를 프로그램에 할당 & 회수
-
이런 장치들은 흔히 입출력(Input/Output)장치라고 부름
2-4. 파일 관리자
-
시스템 안의 데이터, 응용 프로그램 등 모든 파일에 사용자별로 파일 접근 권한 부여
-
접근 권한에 따라 파일을 할당 & 해제
2-5. 네트워크 관리자
-
네트워크에서 접근 가능한 CPU, 메모리, 프린터, 디스크 드라이버, 모뎀, 모니터 자원 관리
(3) 윈도우 역사
(4) 윈도우 구조
4-1. 커널(Kernel)
-
운영체제 중심에 위치
-
운영체제에서 어떤 작업을 시작하더라도 커널 동작으로 제어
-
인터럽트 처리, 프로세스 관리, 메모리 관리, 파일 시스템 관리, 프로그래밍 인터페이스 제공 등 운영체제 기본 기능을 제공하는 핵심
4-1-1. 인터럽트
-
작동 중인 컴퓨터에 예기치 않은 문제 발생 경우 CPU가 하드웨어적으로 상태를 체크하여 변화 대응
-
발생 시, 운영체제 제어 프로그램에 있는 인터럽트 처리 루틴 작동하여 인터럽트를 해결하고, 인터럽트가 생기기 이전 상태로 복귀
4-1-2. 인터럽트 발생 원인
-
갑작스런 정전
-
기계적 문제 발생
-
오퍼레이터나 타이머가 프로그램 의도적 중단
-
입출력 종료나 입출력 오류로 CPU 기능 요청 시
-
프로그램 실행 중 보호된 기억 공간 접근 & 불법적인 명령 수행으로 프로그램 문제 발생 시
(5) 윈도우 커널 구조
-
1. 하드웨어
-
2. HAL (하드웨어 제어)
-
3. 마이크로 커널
-
4. 각종 관리자
-
5. 응용 프로그램
-
하드웨어부터 각종 관리자까지 커널 모드로 구분하고, 응용 프로그램은 사용자 모드로 구분
-
커널 모드는 기본적으로 사용자가 접근할 수 없는 영역, 프로그램을 실행하는 기본 관리 시스템이 위치
-
HAL은 하드웨어와 개발된 소프트웨어가 원활히 통신할 수 있도록 도와주는 번역자 역할
-
마이크로 커널은 하드웨어와 하는 통신만 제어하는 최소한 커널(system32 폴더의 ntoskrnl.exe파일)
(6) 윈도우 관리자 역할
6-1. 입출력 관리자
-
시스템 입출력 제어
-
장치 드라이버 사이에서 메시지를 전달, 응용 프로그램이 하드웨어와 바로 통신할 수 있는 통로 제공
6-2. 개체 관리자
-
파일, 포트, 프로세스, 스레드 등 모든 것을 개체로 정의
-
이런 각 개체 정보를 제공
6-3. 보안 참조 관리자
-
각 데이터나 시스템 자원의 제어를 허가 & 거부
-
시스템 강제 보안 설정을 책임
6-4. 프로세스 관리자
-
스레드 생성 & 요청에 따라 처리
6-5. 로컬 프로시저 호출 관리자
-
각 프로세스는 서로 메모리 공간을 침범하지 못해 프로세스 간 통신이 필요할 때 대신할 수 있는 장치
6-6. 가상 메모리 관리자
-
응용 프로그램의 요청에 따라 RAM 메모리 할당 & 가상 메모리 페이징 제어
6-7. 그래픽 장치 관리자
-
화면에 선이나 곡선을 그리거나 폰트 등을 관리
6-8. 기타 관리자
-
캐시 관리자, Plug and Play 관리자, 전원 관리자 등이 있음
(7) 서브 시스템
-
윈도우에서 여러 응용 프로그램을 실행하는 컨테이너
-
사용자가 로그인할 때 데이터를 보호하고, 운영체제가 이를 제어할 수 있도록 함
7-1. Win32
-
기본 서브시스템으로 32비트 응용 프로그램이 동작할 수 있게 해준다.
-
기본 윈도우 사용자 인터페이스 제공
-
비디오 디스플레이, 키보드, 마우스 등을 지원
7-2. POSIX
-
보안 서브 시스템과 유닉스 운영체제에 기반을 둔 일련의 표준 운영체제 인터페이스
7-3. 윈도우 리눅스 서브 시스템
-
윈도우 10부터 도입된 특이한 서브 시스템
-
윈도우에서 리눅스 운영체제를 설치해서 쓸 수 있게 하고, 리눅스 프로그램도 그 안에서 실행 가능
(8) 윈도우 파일 시스템
8-1. FAT
-
기본적으로 2GB까지를 한 파티션으로 설정 가능
-
FAT 테이블 기본 크기는 16비트, 이는 하드 디스크에 파일을 담는 최소 단위인 클러스터가 32KB이기 때문
-
전체 가능 용량은 2GB
8-2. FAT32
-
FAT와는 비교할 수 없을 만큼 용량이 커서 클러스터를 총 32비트개 가질 수 있음
-
호환성이 좋아 리눅스나 다른 운영체제에 정보를 옮길 때 유용
-
접근 제어를 설정할 수 없다는 문제점이 있음
8-3. NTFS
-
HPFS의 장점을 모아 만든 것
-
현재 윈도우에 적용
-
파일 시스템 결함을 관리하는 데 FAT나 FAT32보다 훨씬 좋은 성능을 보여줌
-
보완 관점에서도 비교적 훌륭하며, 개별 폴더와 파일에 사용 권한 설정 가능
-
각 파일과 폴더에 해당 계정만 접근하여 읽을 수 있게 암호화가 가능하며 폴더를 암호화하면 안에 있는 파일도 모두 암호화가 됨
-
암호화된 폴더나 파일은 복사나 이동을 해도 암호화 속성을 잃지 않으며 감사 기능을 제공
(9) 윈도우 부팅 순서
9-1. POST 실행
-
하드웨어 스스로 시스템에 문제가 없는지 기본 사항을 검사하는 과정
-
BIOS가 POST를 실행하고, 라우터나 스위치 등 장비에서도 처음 스위치를 켤 때 POST를 실행
-
POST 도중 하드웨어에서 문제 발견 시 여러 방법으로 알림
9-2. 기본 부팅 관련 설정 사항 로드
-
BIOS는 CMOS에 설정된 시스템 설정 사항 및 부팅과 관련된 여러 가지 정보를 읽어 시스템에 적용
9-3. MBR 로드
-
MBR은 저장 매체 첫 번째 섹터(LBA 0)에 위치하는 512바이트 영역
-
부팅 매체의 기본 파일 시스템 정보가 들어 있음
-
운영체제를 부팅할 때 저장 매체의 첫 번째 섹터를 호출하면 해당 부트 코드를 수행
-
부트 코드의 주 역할은 파티션 테이블에서 부팅 가능한 파티션을 찾아 해당 파티션의 부트 섹터에 호출
-
부팅 가능한 파티션이 없으면 오류 메시지를 출력
9-4. NTLDR 실행
-
NTLDR은 하드 디스크의 부팅 파티션에 있는 프로그램
-
윈도우를 부팅할 수 있도록 간단한 파일 시스템을 실행
-
boot.ini 파일 내용을 읽어 가능한 부팅 옵션을 보여 줌
9-5. NTDETECT.com 실행
-
NTDETECT는 NTLDR에서 제어권을 위임받아 시스템에 설치 & 하드웨어 검사
-
PC의 CPU 유형 / 버스 유형 / 비디오 보드 유형 / 키보드와 마우스 종류 / 컴퓨터에 장착된 직렬 포트와 병렬 포트 / 플로피 드라이브
-
NTDETECT가 문제없이 작동 되면 레지스트리 하드웨어 키를 만들고, 이 키는 HKEY_LOCAL_MACHINE에 있음
-
컴퓨터를 재부팅할 때마다 레지스트리의 해당 부분을 만들기에 항상 현재의 하드웨어 구성 반영
9-6. ntoskrnl.exe 실행
-
ntoskrnl은 HAL.DLL을 로드하며 네 가지가 있음
9-6-1. 커널 로드
-
시스템 설정 로드
-
HKEY_LOCAL_MACHINE\System\Current Controlset\Services에 저장
-
이 정보를 확인하여 로드할 드라이브와 그 순서를 결정
9-6-2. 커널 초기화
-
드라이버에서 현재 제어 설정을 검사 & 작업 시작
9-6-3. 서비스 로드
-
세션 관리자 서브시스템(smss.exe)과 Win32 서브시스템을 로드
9-6-4. 서브시스템 시작
-
윈도우 서브 시스템을 초기화
-
Win32 서브시스템은 로그인을 처리하고 Winlogon.exe를 시작
-
로그인 창을 활성화, 계정과 패스워드를 입력받아 로컬 보안 인증 서버(lsass.exe)에 보냄
-
전달받은 로컬 보안 인증 서버는 보안 계정 관리자(SAM)에 저장된 정보와 비교하여 일치하면 Userinit.exe 프로세스가 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon의 셸 값에서 참조되는 셸을 실행
(10) 윈도우 비스타 이후 부팅 순서
1~3. POST 실행 및 기본 부팅 관련 설정 사항 로드, MBR 로드
4. 윈도우 부트 서브 시스템 실행
-
MBR에서는 NTLDR을 실행하지 않고 윈도우 부트 서브 시스템을 실행
-
윈도우 부트 서브 시스템은 bootmgr.exe를 실행, 부트 설정 데이터를 읽어 실행 가능한 운영체제 목록을 보여줌
5. 윈도우 OS 로더(Winload.exe)실행
-
Winload는 NTDETECT처럼 각종 장치 드라이버를 로드하고 ntoskrnl.exe를 실행
(11) 리눅스 / 유닉스 역사
(12) 리눅스 / 유닉스 구조
12-1. 모놀리식 커널
-
커널이 모든 기능을 수행하도록 만들었으며, 안정적이지만 문제가 발생하면 부분 수정이 어려움
-
일반 시스템보다 거대한 슈퍼컴퓨터에 많이 적용
12-2. 마이크로 커널
-
최소한의 커널인 윈도우 마이크로 커널과 달리 모듈 여러 개가 모여 커널 하나를 이루는 개념
-
개별 모듈의 업로드와 언로드가 가능
-
각 모듈 권한이 동일하여 잘못된 모듈을 업로드하면 커널 전체가 망가질 수도 있음
(13) 유닉스 링 구조
-
링 개수가 많을수록 보안 레벨은 높지만, 윈도우가 유닉스보다 보안 레벨이 높다고는 할 수 없음
-
유닉스 링 구조가 윈도우보다 명확하게 구분되어 있어 링 개수는 적지만 일반적으로 유닉스가 조금 더 높은 보안 수준을 유지
(14) 유닉스 시스템 구조
-
유닉스 커널 구조는 크게 파일 서브시스템, 장치 드라이버, 프로세스 제어로 나뉨
14-1. 프로세스 제어
-
전체 프로세스 간 통신과 스케줄링, 메모리 관리 구현
14-2. 장치 드라이버
-
윈도우처럼 하드웨어와 소프트웨어를 연결하는 인터페이스 제공
14-3. 파일 서브시스템
-
하드 디스크 같은 저장 공간에 유닉스 파일을 저장하고 있는 역할
(15) 셸
-
커널과 함께 유닉스의 중요한 요소
-
원도우는 GUI 환경이며, 명령 창 기능이 제한적이어서 모든 것을 실행할 수 없지만, 유닉스는 GUI 환경을 지원하면서 셸 기능도 막강함
-
응용 프로그램에서 명령을 받아 커널에 전송하는 역할
-
사용자 키보드 입력을 인식하고 해당 프로그램을 수행
15-1. 셸의 주요 기능
-
자체 내장 명령어 제공
-
입출력, 오류의 방향 변경
-
와일드카드
-
파이프라인
-
조건부, 무조건부 명령 열 작성
-
서브 셸 생성
-
백그라운드 처리
-
셸 스크립트(프로그램 작성)
(16) 리눅스 / 유닉스 파일 시스템
16-1. 일반 파일
-
일반적으로 생각하는 데이터 파일 / 실행 파일
-
텍스트 파일, BMP 파일, EXE 파일 등 일반적인 파일
-
반드시 디렉터리 하나에 포함되어야 함
16-2. 디렉터리
-
유닉스에서는 디렉터리도 파일에 해당
-
디렉터리가 담고 있는 여러 파일과 하위 디렉터리 정보가 담김
16-3. 특수 파일
-
유닉스에서는 프린터, 터미널, 테이프 드라이버 같은 물리적인 장치를 특수 파일로 접근
-
/dev(device)에 있음
16-4. 파이프 파일
-
| 문자를 뜻함
-
명령 두 개를 연결할 때 사용
-
임시 파일을 생성했다가 명령 수행을 마치면 사라지는 것
(17) 유닉스 디렉터리 구조
/bin
-
기본적으로 실행 가능한 파일을 담고 있음
-
echo, mv, copy, pwd, who 등
/etc
-
시스템의 환경 설정 및 주요 설정 파일을 담고 있음
-
passwd, hosts, xined.conf 등
/tmp
-
프로그램 실행 및 설치 시 생성하는 임시 파일을 담고 있음
-
이 디렉터리에 파일 저장 시, 재부팅할 때 임의로 삭제될 수 있음
/lib
-
기본 프로그램의 모듈을 담고 있음
/boot
-
커널용 프로그램 파일을 담고 있음
-
부팅할 때 읽어서 수행
/dev
-
프린터나 터미널 같은 물리적인 장치를 다루는 특수 파일을 담고 있음
/home
-
각 사용자의 작업 디렉터리를 담고 있음
-
각 계정으로 로그인할 때 이 디렉터리 아래에 있는 자신의 작업 디렉터리가 시작 디렉터리가 됨
/usr
-
사용자가 직접 쓰는 파일을 담고 있음
-
다른 디렉터리에 있는 파일이 똑같이 위치할 때가 많은데, 이는 링크되어 있는 것
/usr /lib
-
C언어나 포트란 라이브러리를 담고 있음
/usr /include
-
C언어에서 사용하는 헤더 파일을 담고 있음
(18) 리눅스 / 유닉스 부팅 순서
18-1. POST 실행
18-2. 기본 부팅 관련 설정 사항 로드
18-3. MBR(마스터 부트 레코드) 로드
18-4. 부트 로더 실행
-
리눅스는 부트 로더로 LILO와 GRUB를 사용
-
LILO는 /etc/lilo.conf에 설정 사항을 저장
-
GRUB는 레드햇 7.x 버전부터 기본 부트 로더로 제공
-
사용이 편리하고 윈도우 계열 외에 다른 OS와 멀티 부팅 가능
-
GRUB는 /etc/grub.conf에 설정 사항을 저장하며, 부트 로더를 실행하면 부팅하고자 하는 운영체제 커널 이미지가 메모리에 로드
18-5. 실행 레벨에 따른 서비스 실행
-
부트 로더는 스와퍼라는 pid 0번 프로세스 실행하고, 스와퍼는 다시 pid 1번 init 프로세스를 실행
-
init 프로세스는 다시 /etc/inittab 파일을 읽음
-
inittab 파일은 부팅할 기본 모드를 선택하여 그에 따른 환경을 제공하는 분기점이라 할 수 있음
-
inittab 파일에서는 프로그램 종류에 따라 다른 수준의 실행 레벨을 부여하여 부팅에 필요한 프로그램들을 실행, 일곱 개가 기본
[표 1] 실행 레벨
실행 레벨 0 | 시스템 종료 시에 사용 |
실행 레벨 1 | 단일 사용자 모드, 기본적으로 관리자 권한 셸을 얻음, 데몬을 실행하지 않아 기능 제약 |
실행 레벨 2 | NFS를 지원하지 않는 다중 사용자 모드 |
실행 레벨 3 | 일반 셸 기반의 인터페이스를 가진 다중 사용자 모드 |
실행 레벨 4 | 기본적으로 사용하지 않지만, 사용자가 임의로 정의하여 사용 가능 |
실행 레벨 5 | 기본은 실행 레벨 3과 같으나, GUI 환경 지원 |
실행 레벨 6 | 재부팅 |
# Reference
https://www.hanbit.co.kr/store/books/look.php?p_code=B3283906872
'System' 카테고리의 다른 글
[System] 어셈블리어 기본 명령 (0) | 2020.03.20 |
---|---|
[System] 어셈블리어 구조 & 주소 (0) | 2020.03.20 |
[System] 80x86 시스템 메모리 구조와 동작 (0) | 2020.03.18 |
[System] 80x86 시스템 CPU 구조와 레지스터 (0) | 2020.03.17 |