조립컴퓨터 구매할때 window 프로그램 설치할거냐고 묻는데 만일 설치하지 않는다면 컴퓨터는 켜지기만 할뿐 우리가 생각하는 화면이 나타나지않는다.
이상태에서 컴퓨터를 사용하기 위해선 운영체제(OS)가 필요한데 이것에 대하여 조금 자세히 알아보자
운영체제 (OS, operating system)
HW가 컴퓨터 시스템 운영(조작)을 도와주는 SW로 window, mac, unix. linux 등이 있다(여러 SW가 프로그램을 실행할때 시스템적 조작을 애플리케이션에게 전가해주는 중재자, 자원할당자 역할)
OS 전체를 메모리에 적재하는건 무겁기도 하고 미사용하는 부분도 있기에 자원낭비를 초래한다.
이를 위하여 적재하는 OS를 2가지로 나누었는데 전원이 켜짐과 동시에 켜지는 메모리에 상시 상주하는 부분과(커널, Kernel)필요할때 마다 메모리에 적재시키는 부분으로 나뉜다.
커널에 적재하여 컴퓨터를 시작하는 과정을 시스템 부팅이라고 이야기한다.
시스템부팅 순서
1. 파워버튼 작동시 BIOS의 부트시스템, 부트로더가 커널위치를 찾아 시스템을 초기화시킨다. (컴퓨터 처음 가동소리가 나는시점)
- 몇몇의 컴퓨터는 다단계 부팅을 사용하며 전원이 켜질때 BIOS라 말하는 비휘발성 메모리(ROM)에 존재하는 부트스트랩이 부트로더를 실행
- BIOS - OS중 가장 기본적인 SW로 컴퓨터 입출력을 담당하는 펌웨어이다.
- 펌웨어 - HW에 저장된 SW로 OS에 권한을넘겨주기 전까지 컴퓨터를 제어하는것 (HW끼리 통신할때 통신이 무엇이고 이를 지시할 담당이 필요한데 이것을 펌웨어가 한다.)
- 부트스트랩 - 시스템 초기화 담당
2. 초기화 후 POST작업을 진행해 자체 검사후 메모리에 커널을 적재 (초기 검은화면)
- 부트로더 내부의 부트블록을 디스크에서 찾아 메모리에 적재하는 작업을 담당한다 - 하드웨어를 초기화하고 커널을 압축 해제 후 메모리에 적재, 제어를 OS에 넘기는 과정을 수행하는 것을 말한다. (여기서 펌웨어가 HW의 정상작동을 POST를 통해 확인한다
- POST (Power on self test) - 부팅전 HW에서 자체적으로 진행하는 테스트
- 부트블록 - OS 부팅에 필요한 코드를 저장되어있는 디스크영역
- 슈퍼블록 - 블룩그룹의 가장 앞에 위치, 파일 시스템과 관련된 정보를 갖고있다(파일 시스템 전체크기, 마운트정보)
- 현재 대부분의 컴퓨터 시스템은 BIOS를 UEFI로 대체하였다.
- UEFI (Unified Extensible Firmware Interface) - BIOS(1980년대)보다 큰 디스크용량(2.1TB 이상 HW 인식)과 가독성이 좋은 GUI를 지원
3. 루트파일시스템 마운트된다.
루트파일시스템 - 파일 시스템의 최상위 디렉토리 (사진속 "/" 부분)
4. 컴퓨터 켜짐
컴퓨터 시스템 - 1개 이상의 CPU와 공유 메모리 사이의 액세스를 제공하는 공통 버스(BUS)를 통해 여러 장치 컨트롤러로 구성되며 각 장치의 컨트롤러마다 장치 드라이버를 필요로한다 -> 장치 드라이버(프린터 드라이버)는 장치 컨트롤러(프린터)의 작동을 담당하며 OS에게 장치 사용에 관한 인터페이스를 제공한다.
버스 - 컴퓨터 부품 또는 컴퓨터간 데이터와 정보를 전송하는 통신 시스템
컴퓨터 시스템은 각 장치 드라이브를 활용해 컴퓨터의 실행을 도와준다고 이야기했는데 각 장치 드라이버는 장치 컨트롤러를 적절한 레지스터에 적재하고 컨트롤러는 적재된 내용을 확인하여 작업을 실행한다.
만일 작업중에 더 급한(순위가높은)작업이 들어오면 컴퓨터 시스템은 인터럽트를 활용하여 자원의 재분배를 진행한다.
Mode Bit - CPU에서 실행되는게 OS인지, 사용자의 프로그램인지 구분하는 bit
인터럽트
특정 기능을 수행하던 도중에 어떠한 사유로(작업완료, 선순위 작업의 신규할당 등) 기존작업을 멈춰달라고 요청하는것 (장치드라이버가 컨트롤러에게, 하드웨어가 시스템 버스를 통해 CPU에게 전달)
시스템버스 - 컴퓨터 구성요소간 데이터 전송을 위해 필요로하는 통로
각 장치는 자신만의 인터럽트 매커니즘을 소유하며 장치간 구분을 위해 루틴의 주소값(인터럽트 벡터)를 인덱스로 사용한다. (이를 토대로 적절한 루틴을 거쳐 HW의 제어여부를 전달)
인터럽트 루틴은 인터럽트가 종료후 문제가 발생하기 이전상태로 복구를 진행하고 유일한 장치 번호로 색인된다.
그리고 인터럽트를 유발한 장치를 구분하기 위해 루틴의 주소값(인터럽트 벡터)을 인덱스값로 사용한다.
인터럽트 벡터 - 인터럽트를 처리할 서비스 루틴의 주소를 갖고있는 공간
인터럽트 서비스 루틴 - 인터럽트가 발생하면 어떻게 작업할지 정해진 OS내부의 코드로 인터럽트 종료시 이전상태로 복구(인터럽트 핸들러 라고도 한다)
인터럽트 서비스 - 인터럽트가 걸리고 처리하는 과정
인터럽트의 동작순서
1. 인터럽트 발생
2. 프로그램 실행중단
3. 현재 프로그램 상태 보존
4. 인터럽트 처리루틴 실행 - 원인 파악 및 실직적 작업 수행
5. 상태복구, 이전 작업 재실행
컴퓨터 시스템의 요소
1. HW - CPU, I/O장치(기본 계산용 자원)
2. OS
3. 응용프로그램 - 워드프로세서, 스프레드시트, 컴파일러
4. 사용자 - PC조작하는 사람
OS의 역할
1. 시스템 자원 관리자 (System Resource) - 운영체제가 없을경우 HW는 사용불가 (메모리, 파일시스템 ,프로세스, 캐시)
2. 사용자와 컴퓨터간 커뮤니케이션 지원 - I/O장치(키보드, 마우스 등)를 활용해 반응(클릭,입력)을 보이면 이것을 OS가 하드웨어로 연결해주는 역할
3. HW, 각종 프로그램 제어 - 프로그램의 실행, 실행권한, 사용자 관리
4. 보안 관리
5. 프로그램 수행
6. 보호 및 보안
시스템 자원(System resource) - 컴퓨터 HW(CPU, 메모리, I/O장치) 및 가상 구성요소
OS의 제공요소
1. 사용자 인터페이스 제공 (Shell - 사용자가 OS 및 서비스조작이 가능하도록 인터페이스 제공)
2. 응용프로그램을 위한 인터페이스 제공 - API, 시스템콜(시스템 호출 인터페이스 - API)
쉘(shell)
OS체재 내부(커널)과 사용자 사이의 인터페이스를 제공하는 프로그램으로 명령 줄셸(CLI 제공),그래픽 셸(GUI 제공)가 있다.
명령줄 인터페이스 (CLI, command-line interface) - 터미널을 통해 컴퓨터와 사용자가 상호작용하는 방식(명령 프롬프트)
그래픽 사용자 인터페이스 (GUI, graphical user interface) -사용자가 알기 쉽도록 표시해놓은 그래픽(인터넷 아이콘)
시스템콜 (System Calls) - 커널의 기능을 응용 프로그램 요청에 따라 커널에 접근하기 위한 인터페이스 (프로세스가 하드웨어에 직접 접근해서 필요기능을 사용 -> 보안을 위해 사용하며 "관리자의 권한으로 실행"을 생각하면 된다.)
프로그램 실행순서
1. 프로그램을 실행
2. 하드디스크에서 메모리로 저장 다음에 실행할 명령어를 주기억장치(CPU)로부터 읽는다 (Fetch)
2. 명령어를 디코드 한다 (Decode)
3. 피연산자(Operand)를 주기억장치로부터 읽어온다 (Operand)
4. 명렁어를 실행한다 (Execute)
운영체제의 기법과 정책
기법 (Mechanism) - 필요한 기능을 구현하는것 (어떤식으로 설계할지?)
정책 (Policy) - Mechanism 보다 상위의 정책으로 어떤종류의 결정을 내리는 알고리즘 (뭘 만들건지?)
타이머구조
CPU 보호를 위한 기법으로 특정 사용자(프로세스)를 위하여 타이머를 얼마간 설정할지 결정하는것
정해진 시간이 흐른뒤 OS에서 제어권이 넘어가도록 타이머 인터럽트를 발생시켜 CPU가 특정 프로그램이 독점하는것을 보호 (시분할 체제의 주요요건)
커널의 구조
커널 내부에 넣는 피쳐의 양에따라 모놀리식 커널(좌측), 마이크로 커널(우측) 2가지로 나뉠수 있다.
모놀리식(Monolithic) 구조 (단일구조)
1개의 서비스 또는 어플리케이션이 한개의 거대한 아키텍쳐를 가지는것 (단일코드 아키텍쳐)
1개의 애플리케이션에 계속 기능을 붙이면 신규 개발과 유지보수가 힘들어진다.
(아키텍쳐가 단순하기에 초기엔 개발의 테스트, 배포, 개선이 빠르지만 코드가 쌓이면 장점이 단점으로 바뀐다..)
모놀리식 아키텍처를 갖는 제품의 특징은 내부 요소간의 의존성이 커진다는점으로 의존도가 높아지는 결과를 초래한다.
이러한 단점으로 인하여 모놀리식 구조의 한계를 맞게되었고 이를 해결하기 위해 나타난것이 계층적 구조이다.
방 1개를 크게 쓴다고 생각하면 된다. (전방향으로 커짐)
계층적 구조
OS가 유사한 기능(I/O담당, 메모리 관리 담당 등)을 묶어 각기의 계층으로 만들어놓은 구조로 최하위는 계층0(하드웨어), 최상위는 계층X(UI)이라 표현한다.
상위계층은 하위계층의 기능몰라도 호출하기만 하면 되기에 구현과 디버깅이 쉽다 (TCP/IP가 한가지 예시이며 만일 4계층까지 문제가 없다가 5계층에서 에러 발생시 5계층에서 에러요소가 있음을 쉽게 확인할수 있다)
하지만 모놀리식 구조에 비하여 성능이 떨어진다 - 최하단에 있는것을 호출할경우 상위계층으로 올라갈때마다 호출한것을 갖고 계속 올라가야하기 때문이다.
긴 통로를 여러개의 방으로 나눠서 쓴다고 생각하면 된다 (일자로 계속 커짐)
마이크로커널
이름처럼 커널의 규모를 최소화하고 확장성을 높이기 위해 필수서비스(메모리관리, 프로세스간 통신 및 동기화 등)만 제공한다
프로세스관리, 장치관리등 상대적으로 중요하지 않은 구성요소는 커널외부에 작성하여 유저권한을 통해 필요할때마다 끌어다 쓰는것
사이즈가 작아 OS의 확장이 쉽고 실행을 위해 각 구성요소에 의존하지 않기에(외부에서 끌어다 오기에) 1~2개의 구성요소에서 오류가 나타나도 OS전체가 마비되지 않는다. (이덕에 리얼타임이 중요한 임베디드, MacOS X 등에서 많이쓰인다.)
하지만 외부(OS밖 유저공간) 에서 끌어다 쓰기때문에 모놀리식 보다 속도가 느리다 (A작업을 위해서 A기능을 불러왔는데 B기능도 필요할경우 기다려야한다 ->오버헤드 발생우려)
기초도구를 제외한 살림살이를 전부 방밖에 둔다고 생각하면 된다.
모듈설계
커널이 핵심적인 구성요소(스케쥴링)를 갖고있음과 동시에 모듈을 통해 동적으로 부가적인 서비스를 사용한다. (적재가능커널모듈)
전체적인 모습은 계층구조와 유사하나 어디 계층에서나 원하는 계층을 호출할수 있다는점이 차별점이다.
하이브리드 커널
모놀리식커널 + 단일형 커널의 장점을 혼합해 만든방식
'CS' 카테고리의 다른 글
시스템콜 (0) | 2023.04.01 |
---|---|
링킹과 오브젝트파일 (0) | 2023.03.30 |
프로세서, 프로세스 (0) | 2023.03.21 |
주소 바인딩 (0) | 2023.03.18 |
제네릭(Generic) (0) | 2023.03.14 |