[CS] 1. 운영체제

D.O·2024년 2월 10일
0

운영체제

운영체제(OS, Operating System)란 하드웨어 위에 설치되어 하드웨어 계층과 다른 소프트웨어 계층을 연결하는 소프트웨어 계층이다.

운영체제의 역할

  1. 중재자: 하드웨어와 사용자 간의 중재자 역할을 합니다. 사용자와 응용 프로그램이 하드웨어를 효율적으로, 그리고 공정하게 사용할 수 있도록 관리
  2. 자원 관리자: CPU, 메모리, 저장 공간 등 컴퓨터 자원을 관리하고 최적화합니다.
  3. 보안 제공: 사용자 인증, 데이터 암호화를 통해 시스템 보안을 유지합니다.

대표적인 OS
1. Windows
2. macOS
3. Linux
4. Unix

운영체제의 목적

OS 성능을 평가하는 기준은 주로 아래 4가지 목적에 있음

1. 처리 능력 향상 : OS는 자원 관리를 통해 일정 시간 내에 시스템이 처리하는 일의 양을 향상시킨다.

2. 반환 시간 단축 : OS는 사용자가 시스템에 요청한 작업을 완료할 때까지 소요되는 시간을 단축

3. 사용 가능도 향상 : 사용 가능도는 시스템 자원을 얼마나 빨리 제공할 수 있는가를 의미한다.
OS는 사용자가 컴퓨터를 사용해야 할 때 자원을 즉시 사용할 수 있게 한다.

4. 신뢰도 향상 : 신뢰도는 시스템이 주어진 문제를 정확하게 푸는지를 의미한다. OS는 입력 값에 대한 정확한 결과 값을 줄 수 있도록 신뢰도를 향상해야한다.

CPU와 메모리 구조

CPU : 컴퓨터의 두뇌라고 할 수 있는 CPU는 모든 계산과 명령 처리를 담당합니다. 프로그램의 명령어를 해석하고 실행하여, 컴퓨터가 작업을 수행할 수 있게 합니다.

CPU 구성 요소

ALU (Arithmetic Logic Unit): 산술 및 논리 연산을 수행합니다.
CU (Control Unit): 컴퓨터의 모든 부품이 순서대로 작업을 수행할 수 있도록 명령어의 순서를 제어합니다.
레지스터: CPU 내부의 매우 빠른 메모리로, 계산 중에 임시로 데이터를 저장합니다.

메모리 : 데이터를 저장하기 위한 기억장치. 휘발성 메모리인 주 기억장치와 비휘발성 메모리인 보조 기억장치가 있다.
주 기억장치는 메인 메모리를 의미하며 일반적으로 RAM을 가르킨다. 보조 기억장치는 SSD(Solid State Drvie),HDD(Hard Disk Drive) 등이 해당 한다.

메모리 계층: 컴퓨터는 데이터를 저장하기 위해 여러 종류의 메모리를 사용하며, 이를 메모리 계층이라고 합니다. 속도와 비용을 고려하여 데이터는 가장 빠르지만 비싼 메모리부터 시작하여, 느리지만 저렴한 메모리로 이동합니다.

메모리 계층

레지스터: CPU 내부의 레지스터는 매우 빠른 메모리로, 현재 실행 중인 명령어의 데이터를 임시로 저장하거나, 명령어의 실행 결과를 저장하는 데 사용됩니다.
캐시 메모리: CPU와 메인 메모리 사이에 위치하며, 자주 사용되는 데이터를 빠르게 접근하기 위해 사용됩니다.
주 메모리 (RAM): 프로그램의 명령어와 데이터를 저장하는데 사용되며, 전원이 꺼지면 데이터가 사라집니다.
보조 메모리: 하드 드라이브(HDD), 솔리드 스테이트 드라이브(SSD) 등이 있으며, 비휘발성 저장소로 전원이 꺼져도 데이터가 유지됩니다.

CPU는 먼저 캐시 메모리에서 데이터나 명령어를 찾으려 시도하고, 캐시에 없을 경우 주 메모리에서 가져옵니다.

따라서, CPU가 처리하는 명령어는 기본적으로 주 메모리에 위치하지만, 실행 과정에서 캐시 메모리나 CPU 내부의 레지스터를 통해 더 효율적으로 처리됩니다. 이러한 메모리 계층 구조는 CPU의 성능을 최적화하고, 프로그램 실행 속도를 향상시키는 데 중요한 역할을 합니다.

운영체제는 메모리를 효율적으로 관리하기 위해 가상 메모리, 페이징, 세그먼테이션 등의 기술을 사용합니다. 이를 통해 메모리 공간을 최적화하고, 프로그램 간 메모리 충돌을 방지합니다.

CPU,메모리 동작과정

프로그램을 실행하면 OS가 디스크에 있는 프로그램을 메모리로 로드(load)한다.
메모리에 로드한 프로그램을 프로세스(process)라고 하며 CPU가 처리한다.

CPU는 주 메모리에서 명령어를 가져오고(Instruction Fetch), 해석(Instruction Decode), 실행(Execute)하는 단계를 반복합니다. 이 과정은 CPU의 클록 속도에 따라 결정되며, 클록 속도가 높을수록 더 많은 명령어를 빠르게 처리할 수 있습니다.

디스크 -(로드)-> 메모리 -(fetch)-> CPU (decod, execute)

명령어 처리 과정

명령어 Fetch (IF): CPU는 프로그램 카운터(PC)에 저장된 주소를 사용하여 주 메모리에서 다음 실행할 명령어를 가져옵니다. 이때, 명령어는 바이너리 형태로 되어 있습니다.

명령어 Decode (ID): 가져온 명령어를 CPU 내부의 컨트롤 유닛(CU)이 해석합니다. 명령어의 종류에 따라 어떤 연산을 수행할지 결정합니다.

Execute (EX): ALU(Arithmetic Logic Unit) 또는 다른 구성 요소를 사용하여 실제 연산을 수행합니다. 데이터는 레지스터 또는 메모리에서 가져올 수 있으며, 연산 결과는 다시 메모리에 저장되거나 레지스터에 저장될 수 있습니다.

ALU (Arithmetic Logic Unit)
ALU는 컴퓨터의 CPU 내부에 위치한 구성 요소로, 산술 연산(예: 덧셈, 뺄셈)과 논리 연산(예: AND, OR, NOT)을 담당합니다. 프로그램 실행 중에 발생하는 모든 수치 계산과 논리적 판단을 처리하는 핵심 부분입니다. ALU의 성능은 CPU의 전체 성능을 결정하는 중요한 요소 중 하나입니다.

CU (Control Unit)
CU, 즉 제어 유닛은 CPU의 또 다른 핵심 구성 요소로, 컴퓨터의 모든 하드웨어 작업을 제어하고 조정합니다. CU는 메모리에서 명령어를 가져와서 그 명령어를 해석하고, 실행을 위해 필요한 신호를 ALU나 메모리 및 기타 입출력 장치로 전송하는 역할을 합니다. 즉, 컴퓨터가 어떤 작업을 언제, 어떻게 수행할지를 결정하고 지시합니다.

PC (Program Counter)
PC는 프로그램 카운터로, CPU 내에서 다음에 실행될 명령어의 메모리 주소를 가리킵니다. 프로그램 실행 중, PC는 현재 실행 중인 명령어의 위치를 추적하며, 명령어가 실행될 때마다 그 다음 명령어의 위치로 업데이트됩니다. 이를 통해 CPU는 프로그램의 명령어들을 순차적으로 실행할 수 있습니다. PC는 프로그램의 흐름을 제어하는 데 중요한 역할을 하며, 분기나 반복과 같은 제어 구조를 구현하는 데 필수적입니다.

CPU 코어

1. 단일 코어 CPU
단일 코어 CPU의 경우, 물리적으로 한 시점에 하나의 프로세스만 실행
운영체제의 멀티태스킹 기능을 통해, 여러 프로세스가 동시에 실행되는 것처럼 수행
이는 운영체제가 CPU 시간을 여러 프로세스 사이에서 빠르게 전환(switching)함으로써 가능합니다. 이 과정을 컨텍스트 스위칭이라고 합니다.
이 방식으로 단일 코어 CPU에서도 여러 프로세스가 동시에 실행되는 것처럼 처리할 수 있지만, 실제로는 한 순간에 하나의 작업만 처리합니다.

2. 멀티 코어 CPU
멀티 코어 CPU는 물리적으로 여러 코어를 가지고 있어, 각 코어가 동시에 서로 다른 프로세스를 실행할 수 있습니다. 예를 들어, 4코어 CPU는 동시에 최대 4개의 프로세스를 실행할 수 있습니다. 멀티 코어 프로세서는 병렬 처리를 가능하게 하여, 전체 시스템의 처리 능력을 크게 향상시킬 수 있습니다.

커널과 시스템 콜

커널이란

커널(Kernel)은 운영체제의 핵심 부분으로, 시스템의 모든 것을 관리한다.
하드웨어와 소프트웨어 사이의 다리 역할
커널의 주요 역할에는 프로세스 관리, 메모리 관리, 파일 시스템 관리, 장치 드라이버와의 통신등

즉, 컴퓨터의 자원을 효율적으로 관리하고, 사용자와 응용 프로그램이 안전하게 컴퓨터를 사용할 수 있도록 하는 것이 커널의 임무

컴퓨터 시스템에서 운영체제는 보안과 효율성을 위해 두 가지 다른 모드로 실행
사용자 모드(User Mode)와 커널 모드(Kernel Mode).
이러한 모드 분리는 시스템 자원과 중요한 하드웨어 기능에 대한 접근을 제어하여 시스템의 안정성과 보안을 유지

사용자 모드 (User Mode)
1. 제한된 접근: 사용자 모드에서 실행되는 프로세스는 제한된 메모리 공간에만 접근할 수 있으며, 하드웨어 직접 제어와 같은 중요한 시스템 자원에 대한 접근이 제한됩니다.
2. 응용 프로그램 실행: 사용자 모드는 일반 응용 프로그램이 실행되는 환경입니다. 이 모드에서는 운영체제의 핵심 부분에 직접 접근할 수 없으며, 시스템 콜을 통해 커널 모드의 서비스를 요청할 수 있습니다.
3. 보안과 안정성: 사용자 모드는 시스템의 보안과 안정성을 유지하기 위해 설계되었습니다. 응용 프로그램이 시스템의 중요한 부분을 임의로 변경할 수 없기 때문에, 잘못된 코드 실행으로 인한 시스템 전체의 실패를 방지합니다.

커널 모드 (Kernel Mode)
1. 전체 접근 권한: 커널 모드에서 실행되는 프로세스는 시스템의 모든 메모리와 하드웨어 자원에 접근할 수 있습니다. 이는 운영체제의 핵심 부분이나 장치 드라이버와 같은 저수준의 작업을 수행할 때 필요합니다.
2. 운영체제의 핵심 기능: 커널 모드는 운영체제의 중요한 작업을 처리합니다. 이에는 프로세스 관리, 메모리 관리, 하드웨어 장치와의 통신 등이 포함됩니다.
3. 위험성: 커널 모드에서는 보호받지 않는 환경에서 작업이 수행되므로, 실수나 버그가 시스템 전체에 심각한 영향을 줄 수 있습니다. 따라서, 커널 모드는 필요한 경우에만 사용되어야 합니다.

시스템 콜

사용자 모드에서 실행된 프로세스가 자원에 접근하려면 시스템 콜을 호출해 커널에 요청해야 한다.
여기서 시스템 콜은 사용자 모드에서 커널모드에 접근해 필요한 기능을 수행할 수 있게 하는 시스템 함수
커널은 시스템 콜로 요청을 처리한 후 다시 시스템 콜로 결과 값을 반환한다.

사용자 모드와 커널 모드의 분리는 운영체제의 설계에서 중요한 부분을 차지하며, 시스템의 안정성, 보안, 그리고 효율적인 자원 관리를 가능하게 합니다.

시스템 콜의 대표적인 예로는 프로세스를 생성하는 fork(), 부모 프로세스가 자식 프로세스의 수행을 기다리는 wait() 등이 있다.

profile
Android Developer

0개의 댓글