Post

[운영체제] 2장 컴퓨터 시스템과 운영체제 (1)

1. 컴퓨터 시스템과 하드웨어


1.1 컴퓨터 시스템의 범위

컴퓨터 시스템은 크게 다음 3개의 요소로 이루어진다.

  • 응용 소프트웨어 층
  • 운영체제 층
  • 하드웨어 층

사용자는 응용 소프트웨어를 조작하여 컴퓨터를 사용하고 응용 프로그램은 운영체제와의 인터페이스를 통해 하드웨어를 조작한다.

운영체제의 본질적인 특징은 사용자가 하드웨어에 대한 구체적인 내용을 몰라도 사용할 수 있게함에 있다.

1.2 컴퓨터 하드웨어

오늘날 컴퓨터 하드웨어 구조는 그 종류가 다양하여 한 가지 구조로 설명하기 어렵다.

다음은 컴퓨터 하드웨어 구조를 일반화 시킨 구조이다.

컴퓨터하드웨어구조

1.2.1 CPU (Central Processing Unit)

CPU는 기계 명령을 실행하는 부품으로 메모리에 적재된 프로그램을 실행한다.

1.2.2 메모리 (Memory)

CPU에 의해 실행되는 포로그램 코드와 데이터가 적재되는 공간

1.2.3 캐시 메모리 (Cache Memory)

CPU와 메모리의 속도 차이로 발생하는 속도 저하가 발생

이를 위해 CPU와 메모리 사이에 매우 빠른 메모리를 두어 CPU의 프로그램 실행 속도를 높이고자 함

CPU 외부 : off-chip-cache / CPU 내부 : on-chip-cache

1.2.4 장치들 (Device)

키보드, 프린터, 스캐너 등등

1.2.5 버스 (Bus)

하드웨어 장치간 서로 데이터를 주고 받기 위한 여러 가닥의 다발로 구성된 통로

  • 주소 버스 (address bus) - 단방향
  • 데이터 버스 (data bus) - 양방향
  • 제어 버스 (control bus) - 단방향
1.2.5.1 시스템 버스와 (System Bus) 입출력 버스 (I/O Bus)

​ 버스는 목적에 따라 시스템 버스와 입출력 버스로 나뉜다.

  • 시스템 버스 - 액세스 ↑ 속도 ↑ (CPU, 캐시 메모리, 메모리 등)
  • 입출력 버스 - 액세스 ↓ ( I/O 장치들)

​ ※ 두 버스의 속도 차이로 발생하는 시스템 버스의 성능 저하를 방지하기 위해 두 버스 사이에 Bridge를 두어 연결함

1.3 CPU와 메모리의 관계

컴퓨터에 대해 말할 때 자주 등장하는 CPU의 비트에 대한 내용이다.

우리는 일상에서 ‘나는 32비트 CPU를 사용해’라고 말하곤 하는데 이는 무슨 뜻일까?

32비트 CPU란 32개의 주소선을 가진 CPU란 뜻으로 주소 한 가닥에는 하나의 비트가 전달된다.

컴퓨터에 관심이 있는 사람들은 32비트 CPU에는 최대 4GB 이상의 메모리는 사용하지 못한다고 들어본 적 이 있을 것이다.

이는 32개의 주소선을 가진 CPU가 액세스할 수 있는 주소 범위가 2 32 개의 서로 다른 주소, 즉 0 ~ 2 32-1번지의 주소 범위를 가지기 때문이고

한 메모리 크기는 1 바이트이기 때문에 CPU가 액세스할 수 있는 메모리의 범위가 최대 232 바이트 = 4GB이기 때문이다.

※ 참고. 메모리 저장 방법 : Little / Big Endian -> Little 작은 주소 번지에 LSB부터 저장

1.4 CPU의 기계 명령

CPU 명령은 CPU가 해석하고 실행할 수 있는 기계 명령으로 CPU 제조사마다 다르다.

컴파일 시 우리가 짠 한 문장의 코드는 여러줄의 어샘블리어 명령과 기계 명령으로 구성된다.

1.5 CPU의 일생

CPU는 전원이 켜지면 작동을 시작해서 전원이 꺼질 때까지 무언가를 계속 실행한다.

1.5.1 CPU의 레지스터들

  • PC (Program Counter) - 다음에 실행할 명령의 주소를 담고 있는 레지스터
  • IR (Instruction Register) - 현재 실행중인 명령을 담고 있는 레지스터
  • SP (Stack Pointer) - 스택 영역의 꼭대기 주소를 담고 있는 레지스터
  • 데이터 레지스터 (Data Register) - 연산에 사용될 데이터 저장되는 레지스터
  • 상태 레지스터 (Status Register) - CPU 상태 및 인터럽트 금지 등 제어 정보를 가지는 레지스터
  • 기타 레지스터 - 운영체제의 실행을 돕는 정보를 가진 레지스터

1.5.2 CPU의 명령 사이클

CPU가 한 개의 명령을처리하는 세부 과정을 CPU 명령 사이클 (instruction cycle)이라고 함

※ instruction cycle은 여러 micro instruction으로 나뉘고 이는 다시 micro operation으로 나눌 수 있음

1.6 스택 (Stack은 어디에 있는가?)

운영체제는 프로그램을 실행시킬 때 다음 4개의 공간을 제공한다.

  • 코드 (Code) 공간 - 프로그램 코드가 적재되는 메모리 공간
  • 데이터 (Data) 공간 - 전역 변수들이 적재되는 공간
  • 힙 (Heap) 공간 - 프로그램이 실행 중 동적으로 저장할 데이터를 위한 공간
  • 스택 ( Stack ) 공간 - 매개변수, 지역변수, 함수가 실행을 마치고 돌아갈 주소를 저장하는 공간

1.7 컨텍스트 (Context)

어떤 프로그램이 실행중인 일체의 상황, 그 일체의 상황은 메모리와 CPU 레지스터에 고스란히 담겨 있음.

컨텍스트는 간단히 프로그램 실행에 대한 정보 ( CPU 레지스터 및 특정 메모리 공간의 값 들) 이라고 할 수 있으며 메모리의 내용은 복사할 필요가 없기에 현재 실행중인 프로그램의 컨텍스트는 현재 CPU에 들어 있는 레지스터의 값들로 축소 정의할 수 있다

운영체제가 현재 실행중인 A 프로그램의 컨텍스트를 저장해두고 다른 프로그램 B를 실행하기 위해 B의 컨텍스트를 CPU로 옮기는 것을 컨텍스트 스위칭 (Context Switching)이라고 한다.

※ OS는 컨텍스트 스위칭 횟수를 줄이는 것이 목표 / CPU는 컨텍스트 스위칭 시간을 줄이는 것이 목표

1.8 멀티 코어 CPU

코어란 하나의 프로그램을 실행할 수 있는 프로세서로 여러개의 코어를 가진 CPU를 멀티 코어 CPU라고 한다.


2. 컴퓨터 시스템의 계층 구조와 운영체제 인터페이스

운영체제는 부팅 후부터 메모리에 상주하며 하드웨어를 완전 장악하여 제어하며, 사용자와 응용 프로그램에게 서비스를 제공하는 실체가 있는 코드이다.

2.1 컴퓨터 시스템의 계층 구조

사용자가 컴퓨터 하드웨어에 대한 지식 없이도 사용할 수 있도록 하드웨어를 다루는데 중요한 목적이 있다.

컴퓨터계층구조

※ 계층 구조 (hierarchy)의 목적 : 계층 간 독립성을 확보하기 위함이다. 각 계층은 독립성을 유지하고 있기 때문에 어떤 한 계층의 기능이 변경된다고 할 때 해당 계층을 제외한 계층은 영향을 받지 않기에 유지 보수에 용이하다.

2.1.1 운영체제 ↔ 응용 프로그램의 관계

응용 프로그램이 직접 하드웨어를 조작할 수 없다. 따라서 하드웨어 조작이 필요한 경우 시스템 호출 (System Call) 함수를 이용하여 운영체제에게 서비스를 요구하여 하드웨어 자원에 대한 충돌을 방지한다.

2.1.2 운영체제 ↔ 사용자 관계

사용자가 하드웨어에 대한 자세한 지식 없이도 컴퓨터를 쉽게 다룰 수 있게 한다.

2.1.3 운영체제 ↔ 하드웨어 관계

사용자/응용체제와 하드웨어 사이의 매개체로 하드웨어에 대한 입출력을 전담한다.

2.3 운영체제와 커널

운영체제가 어떤 소프트웨어인지 요소들을 이용하여 다시 정의하자면

운영체제는 도구/GUI 소프트웨어, 커널(Kernel), 디바이스 드라이버들로 구성되는 소프트웨어이다.

운영체제구조

운영체제의 핵심 부분을 커널이라고 부르며 이전 정리에서 언급하였던 기능들이 구현되어 있다.

도구 소프트웨어는 사용자가 컴퓨터를 쉽게 사용할 수 있도록 하는 소프트웨어이며

다바이스 드라이버는 I/O장치를 구동하고 제어아혀 I/O를 수행하는 소프트웨어 이다.

2.3.3 커널

부팅 후부터 메모리에 상주하며 다음과 같은 작업을 수행한다.

  • 프로세스와 스레드 관리
  • 메모리 관리
  • 파일 시스템 관리
  • 디바이스 드라이버 호출하여 장치 입출력

응용 프로그램이 커널에 있는 함수를 활용할 수 있는 유일한 방법은 시스템 호출 (System Call)이다.

2.3.4 디바이스 드라이버

장치를 직접 제어하는 소프트웨어

2.4 운영체제 커널 인터페이스 : 시스템 호출과 인터페이스

시스템 호출 (System Call) - 커널 ↔ 응용 프로그램

인터럽트 (Interrupt) - 커널 ↔ 하드웨어

  • 시스템 호출 - 응용 프로그램에서 커널 코드를 실행하는 기법

    응용 프로그램이 커널 코드를 활용할 수 있는 유일한 관문이다.

※ 표준 라이브러리 - 복잡한 기능 함수로 제공 쉬운 개발을 위함

※ 시스템 호출 라이브러리 - 커널 코드 불러서 사용할 수 있도록 함

  • 인터럽트 - 하드웨어 장치들이 CPU에게 인터럽트 신호를 물리적으로 발생시켜 입출력 완료나 타이머 완료 등을 CPU에게 알리는 방법

    하드웨어(I/O 요청 신호) → 커널 → CPU는 요청 처리하는 기능 수행 코드 실행 (인터럽트 서비스 루틴, ISR)

This post is licensed under CC BY 4.0 by the author.