blair's 개발 portfolio

[면접을 위한 CS 전공지식 노트] 3. 운영체제(운영체제와 컴퓨터, 메모리)

1. 운영체제와 컴퓨터

  • 운영체제는 사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스 한정된 메모리나 시스템 자원을 효율적으로 분배해준다
  • 운영체제와 유사하지만 소프트웨어를 추가로 설치할 수 없는 것을 펌웨어라고 한다
  • 하드웨어와 소프트웨어(유저 프로그램)을 관리하는 운영체제와 CPU 메모리등으로 이루어진 컴퓨터를 알아보자

 

역할과 구조

운영체제의 역할

1. CPU 스케줄링과 프로세스 관리 : CPU 소유권을 어떤 프로세스에 할당할지 프로세스의 생성과 삭제 지원 할당 및 반환을 관리

2. 메모리 관리: 한정된 메모리를 어떤 프로세스에 얼만큼 할당해야 하는지 관리

3. 디스크 파일 관리 : 디스크 파일을 어떠한 방법으로 보관할지 관리

4. I/O 디바이스 관리 :  I/O 디바이스들인 마우스, 키보드와 컴퓨터 간에 데이터를 주고받는 것을 관리

 

운영체제의 구조

 

여기서 GUI, 시스템콜, 커널, 드라이버 부분이 바로 운영체제를 지칭

GUI가 없고 CUI만 있는 리눅스 서버도 있다

 

GUI : 사용자가  전자장치와 상호 작용할 수 있도록 하는 사용자 인터페이스의 한 형태, 단순 명령어 창이 아닌 아이콘을 마우스로 클릭하는 단순한 동작으로 컴퓨터와 상호작용을 적용할 수 있도록 해준다

 

드라이버 : 하드웨어를 제어하기 위한 소프트웨어

 

CUI :  그래픽이 아닌 명령어로 처리하는 인터페이스

 

시스템콜 :

운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의 서비스를 받기 위해 커널함수를 호출할 때 쓴다

유저프로그램이 I/O 요청으로 트랩을 발동하면 올바른 I/O 요청인지 확인한 후 유저 모드가 시스템 콜을 통해 커널 모드로 변환되어 실해

 

I/O 요청: 입출력 함수, 데이터베이스, 네트워크, 파일 접근등에 관한일

드라이버: 하드웨어를 제어하기 위한 소프트웨어

  • 프로세스나 스레드에서 운영체제로 어떠한 요청을 할 때 시스템콜이라는 인터페이스와 커널을 거쳐 운영체제에 전달된다
  • 이 시스템콜은 하나의 추상화 계층 => 이를 통해 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역처리에 대한 부분을 많이 신경쓰지 않고 프로그램을 구현할 수 있는 장점이 있다

 

modebit : 시스템 콜이 작동할 때 이걸 참고해서 유저모드와 커널 모드를 구분

1또는 0의 값을 가지는 프래그 변수

modebit은 0은 커널모드 1의 유저모드라고 설정

  • 유저모드 : 유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드
  • 커널모드 : 모든 컴퓨터 자원에 접근할 수 있는 모드
  • 커널 : 운영체제의 핵심 부분이자 시스템콜 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 한다

 

컴퓨터의 요소

컴퓨터는 CPU,DMA 컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 이루어져 있다

CPU (central processing unit) : 산술논리연산장치, 제어장치, 레지스터로 구성되어 있는 컴퓨터 장치를 말하며, 인터립트에 의해 단순히 메모리에 존재하는 명령어를 해석해서 실행한다

 

제어장치: (CU, control unit) 프로세스 조작을 지시하는 CPU 의 한 부품 입출력장치 간 통신을 제어하고 명령어들을 읽고 해석하며 데이터 처리를 위한 순서를 결정

레지스터 :

CPU 안에 있는 매우 빠른  임시기억장치

산술논리연산장치 :

덧셈, 뺄셈 같은 두 숫자의 산술 연산과 배타적 논리합, 논리곱 같은 논리 연산을 계산하는 디지털 회로

인터립트 : 

하드웨어 인터립트, 소프트웨어 인터립트 두 가지로 나뉜다

어떤 신호가 들어왔을 때 CPU를 잠깐 정지시키는 것을 말한다

 

하드웨어 인터립트 : 키보드를 연결한다거나 마우스를 연결하는 일 등의 IO 디바이스에서 발생하는 인터립트

소프트웨어 인터립트 : 트랩이라고도 하며 프로세스 오류 등으로 프로세스가 시스템콜을 호출할 때 발동

 

DMA 컨트롤러 :

I/O 디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치

CPU의 일을 부담하는 보조 일꾼

하나의 작업을 CPU DMA 컨트롤러가 동시에 하는 것을 방지

 

메모리 :

전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치를 말하며, 보통 RAM을 일컬어 메모리라고도 한다 

CPU는 계산을 담당하고 메모리는 기억을 담당

 

타이머 :

몇 초 안에는 작업이 끝나야 한다는 것을 정하고 특정 프로그램에 시간 제한을 다는 역할을 한다 

시간이 많이 걸리는 프로그램이 작동할 때 제한을 걸기 위해 존대

 

디바이스 컨트롤러 : 

컴퓨터와 연결되어 있는 IO 디바이스들의 작은 CPU를 말하고 옆에 붙어 있는 로컬 버퍼는 각 디바이스에서 데이터를 임시로 지정하기 위한 작은 메모리를 뜻한다.

 

2. 메모리 

CPU 는 그저 메모리에 올라와 있는 프로그램의 명령어를 실행

 

메모리 계층

메모리 계층은 레지스터, 캐시, 메모리, 저장장치로 구성되어 있다

레지스터 : CPU 안에 있는 작은 메모리, 휘발성, 속도 가장 빠름, 기억 용량도 적다

캐시 : L1, L2 캐시를 지칭, 휘발성, 속도 빠름, 기억 용량이 적다, L3 캐시도 있다

주기억장치 : RAM을 가르킨다, 휘발성, 속도 보통, 기억 용량 보통

보조기억장치 : HDD, SSD를 일컬으며 , 비휘발성, 속도 낮음, 기억 용량이 많다.

 

램은 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하고 이를 필요 시마다 CPU에 빠르게 전달하는 역할을 합니다

계층 위로 올라갈수록 가격이 비싸지고 속도가 빨라지는 특징

=> 이러한 계충이 있는 이유는 경제성과 캐시 때문

 

캐시

캐시는 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말함

이를 통해 데이터를 접근하는 시간이 오래 걸리는 경우를 해결하고 무언가를 다시 계산하는 시간을 절약할 수 있다

 

지역성의 원리

캐시를 직접 설정할때는 데이터를 기반으로 설정해야한다

지역성은 시간 지역성과 공간 지역성으로 나뉜다

 

시간 지역성

최근 사용한 데이터에 다시 접근하려는 특성

공간 지역성

최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성을 말한다

 

캐시히트와 캐시미스

캐시에서 원하는 데이터를 찾았다면 캐시히트라고 하고

해당 데이터가 캐시에 없다면 주 메모리로 가서 데이터를 찾아오는 것을 캐시미스라고 한다

 

캐시히트

캐시히트를 하면 해당 데이터를 제어장치를 거쳐 가져오게 되고 캐시히트의 경우 위치도 가깝고 CPU 내부버스를 기반으로 작동하기 때문에 빠르다

캐시미스 메모리에서 가져오게 되는데 이는 시스템 버스를 기반으로 작동하기 때문에 느리다

 

캐시매핑

캐시가 히트되기 위해 매핑하는 방법을 말하며 CPU와 레지스터와 주 메모리 간에 데이터를 주고받을 때를 기반으로 설명

주메모리는 굉장히 크기 때문에 작은 래지스터가 캐시 계층으로서 역할을 잘해주려면 매핑을 어떻게 해주는냐가 중요

 

웹 브라우저의 캐시

대 표적은 캐시로는 작은 저장소 쿠키, 로컬스토리지, 세션스토리지가 있다

사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해서 추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰이며 오리진에 종속된다

 

쿠키

만료기한이 있는 키-값 저장소

로컬스토리지

만료기한이 없는 키-값 저장소

세션 스토리지 

만료기한이 없는 키-값 저장소, 클라이언트에서만 수정 가능

 

데이터베이스의 캐싱 계층

데이터베이스 시스템을 구축할 때도 메인 데이터 베이스 위에 레디스 데이터베이스 계층을 캐싱 계층으로 둬서 성능을 향상시키기도 한다

 

메모리 관리

운영체제의 대표적인 할 일중 하나가 메모리 관리 컴퓨터 내의 한정된 메모리를 극한으로 활용해야 한다

가상 메모리:

메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말한다

이때 가상적으로 주어진 주소를 가상 주소라고 하며 실제 메모리상에 있는 주소를 실제 주소로하고 한다

가상 주소는 메모리 관리장치에 의해 실제 주소로 변환되며 이 덕분에 사용자는 실제 주소를 의식할 필요없이 프로그램을 구축할 수 있다

가상 메모리는 가상 주소와 실제 주소가 매핑되어 있고 프로세스의 주소정보가 들어있는 '페이지 테이블'로 관리됩니다 이때는 속도 향상을 위해 TLB를 씁니다

 

TLB : 메모리와 CPU 사이에 있는 주소 변환을 위한 캐시, 속도를 향상시킬 수 있는 캐시 계층

 

스와핑 : 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고 하드디스크의 일부분을 마치 메모리처럼 불러와 쓰는 것을 스와핑

이를 통해 페이지 폴트가 일어나지 않은 것처럼 만든다

 

페이지폴트 : 프로세스의 주소공간에는 존재하지만 지금 이 컴퓨터의 RAM에는 없는 데이터에 접근했을 경우에 발생 

 

스레싱 :

메모리의 페이지 폴트율이 높은 것을 의미하며 이는 컴퓨터의 심각한 성능 저하를 초래

스레싱은 메모리에 너무 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생하는 것

이를 해결하기 위한 방법으로는 메모리를 늘리거나 HDD 사용 SSD로 바꾸는 방법 이외에는 작업세트와 PFF

 

PFF(page fault frequency): 페이지 폴트 빈도를 조절하는 방법으로 상한선과 하한선을 만드는 방법

만약 상한선에 도달한다면 프레임을 늘리고 하한선에 도달한다면 프레임을 줄임

 

메모리 할당

메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리 할당 크기를 기반으로 할당 연속할당과 불연속 할당으로 나뉜다

 

연속할당 :

메모리에 '연속적으로' 공간을 할당하는 것

순차적으로 공간에 할당하는 것

메모리를 미리 나누어 관리하는 고정 분할 방시과 매시점 프로그램의 크기에 맞게 메모리를 분할하여 사용하는 가변 분할 방식이 있다

 

고정 분할 방식:

메모리를 미리 나누어 있기 때문에 융통성이 없다 또한 내부 단편화가 발생

 

가변 분할 방식

매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용합니다 내부 단편화는 발생하지 않고 외부 단편화는 발생할 수 있다

이는 최초적합 최적적합최악접합이 있다

 

불연속 할당

메모리를 연속적으로 할당하지 않는 불연속 할당은 현대 운영체제가 쓰는 방법으로 불연속 할당인 페이징 기법이 있다

메모리를 동일한 크기의 페이지로 나누고 프로그램마다 페이지 테이블을 두어 이를 통해 메모리에 프로그램을 할당

이외에도 세그멘테이션, 페이지드, 세그맨테이션이 있다

 

페이징 : 

동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당 홀의 크기가 균일하지 않은 문제가 없어지지만 주소 변환이 복잡

 

세그멘테이션 :

페이지 단위가 아닌 의미의 단위인 세그먼트로 나누는 방식 프로세스를 이루는 메모리는 코드 영역, 데이터 영역, 스택 영역으로 이루어지는데 코드와 데이터로 나누거나 코드 내의 작은 함수를 세그먼트로 놓고 나눌 수 있다. 

이는 공유과 보안 측면에서 장점을 가지지만 홀 크기가 균일하지 않은 단점이 있다

 

페이지드 세그멘테이션 :

프로그램을 의미 단위인 세그먼트로 나눠 공유나 보안 측면에 강점을 두고 임의의 길이나 동일한 크기의 페이지 단위로 나눈 것

 

페이지 교체 알고리즘

메모리는 한정되어 있기 때문에 스와핑이 많이 일어난다 스와핑은 많이 일어나지 않도록 설계되어야 하며 이는 페이지 교체 알고리즘을 기반으로 스와핑이 일어난다

 

오프라인 알고리즘

먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘이며 좋은 방법 하지만 먼미래는 예측하기 어려움

사용할 수 없는 알고리즘이잠 가장 좋은 알고리즘이기 때문에 다른 알고리즘과의 성능 비교에 대한 상한 기준을 제공

 

FIFO :

가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법을 의미

LRU(least recently used):

참조가 가장 오래된 페이지를 바꿈 '오래된' 것을 파악하기 위해 각 페이지마다 계수기, 스택을 두어야하는 단점

NUR(Not used recently):

일명 클락 알고리즘이라고도 하며 먼저 0과1을 가진 비트를 둔다 1은 최근에 참조되었고 0은 참조되지 않음을 의미 

시계방향으로 돌면서 0을 찾고 찾은 순간 해당 프로세스를 교체 해당 부분을 1로 바꿈

LFU(least frequently used) :

가장 참조 횟수가 적은 페이지를 교체 즉, 많이 사용되지 않은 것을 교체하는 것

블로그의 정보

개발 블로그👩‍💻

Blairj

활동하기