카테고리 없음

운영체제와 컴퓨터

JUNGKEUNG 2024. 10. 11. 00:33
반응형

운영체제(OS, Perating System)

사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스이다. 한정된 메모리나 시스템 자원을 효율적으로 분배하는 참된 일꾼이다. 참고로 운영체제와 유사하지만 소프트웨어를 추가로 설치할 수 없는 것을 펌위어(firmware)라고 한다.

펌웨어(firmware)
하드웨어의 기본적인 구동 및 제어를 담당하는 특수 용도의 소프트웨어

 

 

 

운영체제의 역할

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

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

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

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

 

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

커널
 운영체제의 핵심부로 컴퓨터 자원들을 관리하는 역할”을 수행한다. 즉,  컴퓨터 자원만 바라보고 있다.

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

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

I/O
입출력 하무, 데이터베이스, 네트워크, 파일 접근 등에 관한 

 

 

 

시스템콜

운영체제가 커널에 접근하기 위한 인터페이스의 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 쓴다. 유저 프로그램이 I/O 요청으로 트랩(trap)을 발동하면 올바른 I/O 요청인지 확인한 후 유저 모드가 시스템콜을 통해 커널 모드로 변환되어 실행된다.

 

 

시스템콜은 하나의 추상화 계층이다. 그렇기 때문에 이를 통해 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역 처리에 대한 부분을 많이 신경 쓰지 않고 프로그램을 구현할 수 있는 장점이 있다.

 

 

 

modebit

1 또는 0의 값을 가지는 플래그 변수이다. 시스템콜이 작동될 때 modebit을 참고해서 유저 모드 커널 모드를 구분한다.

  • 유저 모드 : 유저가 접근할 수 있는 영역을 제한하여 컴퓨터 자원에 함부로 침범하지 못하는 모드.
    즉, 시스템콜을 못하게 막아서 한정된 기능만 사용 가능하게 한다.
  • 커널 모드 : 모든 컴퓨터 자원에 접근할 수 있는 모드
유저 모드
유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드
modebit에서 1이 유저모드

커널 모드
모든 컴퓨터 자원에 접근할 수 있는 모드
modebit에서 0이 커널 모드

 

 

 

컴퓨터의 요소

 

 

 

CPU(Central Processing Unit)

산술논리연상장치, 제어장치, 레지스터로 구성되어 있는 컴퓨터 장치를 말하며, 인터럽트에 의해 단순히 메모리에 존재하는 명령어를 해석해서 실행하는 일꾼이다.

 

 

제어장치(CU, Conrol Unit)

프로세스 조작을 지시하는 CPU의 한 부품이다. 입출력장치 간 토인을 제어하고 명령어들을 읽고 해석하며 데이터 처리를 위한 순서를 결정한다.

 

 

레지스터

CPU안에 있는 매우 빠른 임시기억장치를 가르킨다. CPU와 직접 연결되어 있으므로 연산 속도가 메모리보다 수십 배에서 수백 배 까지 빠르다. CPU는 자체적으로 데이터를 저장할 방법이 없기 때문에 레지스터를 거쳐 데이터를 전달한다.

 

 

산술논리연산장치(ALU, Arithmetic Logic Unit)

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

 

 

 

- 제어장치가 메모리에 계산할 값을 로드한다. 또한, 레지스터에도 로드한다.

- 제어장치가 레지스터에 있는 값을 계산하라고 산술논리연산장치에 명령한다.

- 제어장치가 계산된 값을 다시 '레지스터에서 메모리로' 계산한 값을 저장한다.

 

 

인터럽트

어떤 신호가 들어와을 떄 CPU를 잠깐 정지시키는 것을 말한다. 키보드, 마우스 등 IO디바이스로 인한 인터럽트, 0으로 수자를 나누는 산술 연상에서의 언터럽트, 프로세스 오류 등으로 발생한다. 

인터 럽트가 발생하면 인터럽트 핸들러 함수가 모여 있는 언터럽트 백터로 가서 인터럽트 핸들러 함수가 실행된다. 인터럽트 간에는 우선순위가 있고 우선순위에 따라 실행되며 언터럽트는 하드웨어 인터럽트, 소프트웨어 인터럽트 두 가지로 나눈다.

인터럽트 핸들러 함수
인터럽트가 발생했을 떄 이를 핸들링하기 위한 함수, 커널 내부의 IRQ를  통해 호출되며 request_irq()를 통해 인터럽트 핸들러 함수를 등록할 수 있다.

 

 

 

DMA 컨트롤러

I/O 디바이스가 메모리에 직접 접근 할 수 있도록 하는 하드웨어 장치를 뜻한다. CPU에만 너무 많은 인터럽트 요청이 들어오기 때문에 CPU부하를 막아주며 CPU의 일을 부담하는 보조 일꾼이라 보면 된다. 또한, 하나의 작업을 CPU와 DMA 컨트롤러가 도이에 하는 것을 방지한다.

 

 

메모리

전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치이다. 보통 RAM(Random Access Memory)을 일컬어 메모리라고도 한다. CPU는 계산을 담당하고, 메모리는 기억을 담당한다.

 

 

타이머

몇 초 안에는 작업이 끝나야 한다는 것을 장하고 특정 프로그램에 시간 제한을 다는 역할을 한다. 시간이 많이 걸리는 프로그램이 작동할 떄 제한을 걸기 위해 존재한다.

 

 

디바이스 컨트롤러

컴퓨터와 연결되어 있는 IO 디바이스들의 작은 CPU를 말한다.

 

 

메모리 계층

  • 레지스터 : CPU안에 있는 작은 메모리, 휘발성, 속도 가장 빠름, 기억 용량이 가장 적다
  • 캐시 : L1, L2 캐시를 자칭한다. 휘발성, 속도 빠름, 기억 용량이 적다. 
  • 주기억장치 : RAM을 가르킨다. 휘라벙, 속도 보통 기억 용량 보통
  • 보조기억장치 : HDD, SSD를 일컬으며 비휘발성, 속도 낮음, 기억 용량이 많다.

 

 

캐시

데이터를 미리 복사해 놓는 임시 저장이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다. 실제로 메모리와 CPU사이의 속도 차이가 너무 크기 때문에 그 중간에 레지스터 계층을 둬서 속도차이를 해결한다. 이렇게 속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층을 캐싱 계층이라고 한다.

 

지역성의 원리
캐시 계층을 두는 것 말고 캐시를 직접 설정할 때는 어떻게 해야 할까?
이는 자주 사용하는 데이터를 기반으로 설정해야 한다. 그렇다면 자주 사용하는 데이터에 대한 근거가 되는 것이 무엇일까? 바로 지역성이다. 
지역성은 시간 지역성(temproal locality)과 공간 지역성(spatial locality)으로 나눈다.

 

 

 

캐시하트와 캐시미스

캐시에서 원하는 데이터를 찾았다면 캐시히트라고 하며, 해당 데이터가 캐시에 없다면 주메모리로 가서 데이터를 찾아오는 것을 캐시미스라고 한다.

 

 

캐시매핑

캐시가 히트되기 위해 매핑하는 방법을 말하며 CPU의 레지스터와 주 메모리(RAM) 간에 데이터를 주고받을 때를 기반으로 설명한다. 레지스터는 주 메모리에 비하면 굉장히 작고 주 메모리는 굉장히 크기 때문에 작은 레지스터가 캐시 계층으로써 역할을 잘 해주려면 이 매핑을 어떻게 하느냐가 중요하다.


컴펄서리 미스(Compulsory Miss)
처음으로 접근하는 데이터 때문에 발생하는 미스어떤 데이터가 처음 캐시에 로드될 때 발생


캐피시티 미스(Capacity Miss)
캐시의 크기가 작아서 발생하는 미스캐시에 데이터가 너무 많이 들어가면 오래된 데이터가 제거되고, 나중에 다시 그 데이터가 필요하면 미스가 발생


컨플릭트 미스(Conflict Miss)

특정 캐시 라인에 여러 데이터가 매핑되어 충돌이 발생할 때 생기는 미스이는 주로 캐시의 매핑 정책과 관련

 

 

 

총 정리

-----------------------------------------------------------------------------------------------

운영체제의 역할은?

  • CPU 스케줄링과 프로세스 관리
  • 메모리 관리
  • 디스크 파일 관리
  • I/O 디바이스 관리

 

 

CPU(중앙처리장치) 란?

데이터와 명령어를 해석하고 실행하는 장치이다. CPU가 여러 개가 있으면 각자 해석하고 실행속도가 빨라진다.

CPU가 제어장치, 산술연산장치, 레지스터로 구성되어있는지 알아보자.

 

  • 제어장치 -> 여러 장치들을 컨트롤하고, 명령어를 해석하기 위해
  • 산술논리연산장치 -> 해석된 명령어에 따라 실제 연산을 수행하려면 필요
  • 레지스터 -> 연산 수행시 메모장에다가 중간 중간 임시로 메모해가며 연산하면 좋다.

예시

  • 명령어 인출 (Fetch):
    • 제어 장치가 프로그램 카운터(PC)를 통해 메모리에서 "3 더하기 5" 명령어를 가져옵니다.
  • 명령어 해독 (Decode):
    • 제어 장치가 명령어를 해독하여 "더하기" 연산을 수행해야 한다는 것을 파악합니다.
    • 제어 장치는 ALU에 더하기 연산을 수행하라고 지시합니다.
  • 명령어 실행 (Execute):
    • 제어 장치는 레지스터에서 값을 가져와 ALU에 전달합니다. 이 경우 3과 5를 레지스터에서 읽어옵니다.
    • ALU는 3과 5를 더하여 결과인 8을 계산합니다.
  • 결과 저장 (Store):
    • 제어 장치는 ALU의 결과(8)를 다시 레지스터에 저장하도록 지시합니다.
    • 결과는 이후 필요할 때 메모리로 옮겨지거나 다른 연산에 사용됩니다.

 

 

DMA(Direct Memory Access) 컨트롤러란?

  • CPU 의 보조일꾼
  • 데이터를 메모리와 주변 장치(예: 하드 드라이브, 그래픽 카드, 네트워크 카드 등) 간에 직접 전송할 수 있도록 도와주는 하드웨어 장치다
  • 왜 필요한가?
    • 보통 데이터를 전송할 때는 CPU가 직접 관여함
    • 근데 CPU 가 DMA 에게 일을 시키고, 다른일을 하면 성능에 매우 좋다!
    • DMA가 없다면? 데이터가 전송될떄까지 CPU 는 다른일을 하지 못하고, 기다려야함
    • 근데 해당 역할을 DMA에게 위임해줌

 

 

메모리 계층은?

레지스터, 캐시, 메모리(ram)/주기억장치, 저장장치(HDD,SDD)  / 보조기억장치

 

 

 

캐시와 지역성 원리란?

캐시는 CPU 와 메모리 사이에 존재하는 고속 메모리이다.

자주 사용되는 데이터를 캐시에 저장해두면, 메모리까지 갈필요없이 캐시에서 데이터를 꺼내서 쓰면 된다

 

 

 

지역성원리란?

최근에 쓰인 데이터는 , 다시 쓰일 가능성이 높음 → 시간 지역성

최근에 쓰인 데이터의 주변 데이터 공간도 , 다시 쓰일 가능성 높음 → 공간 지역성

 

 

 

캐시 매핑의 의미와 방법은?

캐시 매핑은 캐시가 히트되기 위해 매핑하는 방법을 말하고 직접매핑, 연관매핑, 집합 연관 매핑 3가지가 존재한다.

  • 직접 매핑
    • 단순히, 메모리와 캐시를 직접 매핑하는것이다.
    • 메모리의 공간(주소)은 100개 ( 1~100)
    • 캐시의 공간(주소)은 10개 ( 1~10 )
    • 메모리 공간(주소)를 10으로 나눈 나머지를 이용해 캐시에 데이터저장
    • 1,11,21,31.. 91은 10으로 나누면 1이다 → 그래서 캐시 공간 1에 저장된다
    • 2,12,22,32…92은 10으로 나누면 2이다 → 그래서 캐시 공간 2에 저장된다
    • 장점은?
      • 속도가 빠름 : CPU 는 자신의 원하는 데이터가 메모리의 어느 주소공간에 있는지 알고있다, 그렇기 떄문에, 자신이 원하는 데이터가 캐시의 어느 주소에 있는지 나눗셈을 통하여 쉽게 알 수 있다.
    • 단점은?
      • 충돌이 잦음: 11,21,23,41,…91 모두 캐시 1번 공간에 할당될 수 있기 떄문에.. 충돌이 발생할 가능성이 높다
  • 연관 매핑
    • 메모리에 있는 데이터를 캐시의 어느 공간이든 저장할 수 있는 방법. ( 직접 매핑처럼 규칙 없음 )
    • 장점 : 충돌이 적음
    • 단점: 속도가 오래 걸림. CPU 는 해당 데이터가 캐시의 어느 위치에 있는지 알 수 없기 떄문에, 캐시 공간을 하나하나 탐색해야함
  • 집합 연관 매핑
    • 캐시를 여러 집합으로 나누고, 하나의 집합에 연관 매핑을 적용한 것
    • 메모리 : 1~100
    • 캐시: 1~10
    • 집합1 : 캐시 1~5
    • 집합2: 캐시 6~10
    • 메모리 1~50 은 집합1 ( 캐시 1~5 )
    • 메모리 51~100은 집합2 ( 캐시 6~10 )
    • 빠른 검색: 캐시의 집합 내에서만 탐색하면 됨
    • 충돌 적음: 직접 매핑보다는 충돌이 적음. 예를 들어, 집합 1에 저장할 때는 집합 1의 칸들만 확인하면 되므로, 충돌이 일어나더라도 집합 내에서만 처리됨

 

 

한정된 메모리를 어떻게 관리하면 좋을까?

기가 막힌 아이디어가 있는데, 바로 가상 메모리란 개념이다.

가상 메모리

  • 컴퓨터가 실제 메모리(물리적 메모리)보다 더 많은 메모리를 사용할 수 있게 해주는 기술
  • 운영 체제에서 프로그램에게 제공하는 메모리 주소 공간
  • 어떻게 보면 속임수??? 메모리는 한정되어 있는데, 프로그램에게 너 이만큼의 메모리를 사용할 수 있어! 라고 알려줌

페이지 테이블

  • 가상 메모리 주소와, 실제 메모리 주소를 매핑시켜주는 역할

페이지 폴트

  • 가상 메모리에는 존재하지만, 실제 메모리 (RAM) 에는 없는 데이터에 접근할 경우 발생

스와핑

  • 페이지 폴트가 발생하면, 메모리에서 사용하지 않는 영역을 하드디스크로 옮기고, 필요한 데이터를 하드디스크에서 메모리로 옮겨줌

 

 

 

메모리 연속 할당이란?

  • 프로세스A, 프로세스B, 프로세스C 가 순차적으로 메모리 공간에 할당됨
  • 메모리 연속할당에는 고정 분할 방식과 가변 분할 방식이 존재함

고정 분할 방식

  • 메모리를 미리 나누어 관리하는 방식이며, 메모리가 미리 나뉘어 있기 떄문에 융통성이 없다. 또한 내부 단편화가 발생한다
  • 내부 단편화? → 메모리를 5KB씩 미리 나누었는데, 막상 프로그램은 3kb만 사용하게되는 현상

가변 분할 방식

  • 매시점 프로그램 크기에 맞게 동적으로 메모리를 나눠서 사용 ( 미리 나누지 않음 )
  • 내부 단편화는 발생하지 않고, 외부 단편화가 발생함
  • 외부 단편화? → 메모리 내에 여러 개의 작은 빈 공간이 흩어져 있어, 필요한 만큼의 연속된 공간을 확보하기 어려운 문제입니다, 메모리에 5KB, 10KB, 2KB의 빈 공간이 흩어져 있는 경우, 12KB의 연속된 공간이 필요할 때 이를 찾기 어렵다.

 

 

메모리 불연속 할당이란?

고정크기 할당 방식의 내부 단편화의 문제를 해결하기 위해서, 가변크기 할당방식이 등장했다. 그러나 외부 단편화 문제가 생긴다. 이를 해결하기 위해 불연속 할당의 페이징 기법이 등장한다.

 

 

가변크기 할당의 문제점은 무엇인가?

  • 외부 단편화 문제
  • 프로세스 마다 , 할당되는 메모리 크기가 다르다니 발생하는 문제다
  • 프로세스 마다 할당되는 메모리 크기 같으면 외부 단편화 문제는 발생하지 않는다.
  • 그럼 프로세스마다 할당되는 메모리 크기를 같게 만들면 되지 않을까?
  • 프로세스의 논리(가상) 메모리를 ‘같은’ 크기 페이지로 자르면?. 실제 메모리의 프레임도 ‘같은’프레임으로 자르면?
  • 페이지 → 프레임에 알맞게 들어맞게 만들고, 불연속적인 할당을 하면 즉 외부 단편화는 생기지 않는다.

 

페이징 기법이란?

논리주소를 같은 크기의 페이지로 자르고, 같은 크기의 프레임에 불연속적으로 페이지를 할당하는것이다.

 

 

해결해야하는 문제가 무엇인가?

  • 페이지가가 불연속적으로 할당되어 있는데, 흩어진 페이지를 CPU 가 어떻게 찾을수 있을까? 
    • 페이지와 프레임을 연결해논 테이블이 있어야한다. → 이것이 바로 페이지 테이블이다 페이지 테이블엔 페이지번호와 매핑되는 프레임번호 있다 그럼 CPU는 페이지테이블을 통해 원하는 페이지가 어떠한 프레임에 위치해 있는지 찾아갈수있다
  • 페이지 테이블을 활용하면 좋다. 근데 또 문제점이 있다. 
    • 페이지 테이블에서 원하는 페이지가 어떤 프레임에 있는지 찾는 과정 1번 →실제 프레임에 접급하는 과정 1번 → 총 2번의 절차가 이루어진다
  • 중간에 페이지 테이블을 복사해서, 자주사용하는 데이터는 캐시를 둔다.
    • 캐시에 접근 1번 → 프레임에 접근 1번 → 물론 2번 접근하지만, 속도는 더 빠르다
  • 페이지 테이블에 페이지와 프레임을 매핑한 정보가 들어있다고 했는데, 조금더 자세한 내용을 살펴보자. 
    • CPU 가 특정 주소에 접근하려면 알아야 될건 뭐냐? → 어떤 페이지에 속하냐와, 해당 페이지속에서 어느 위치에 있냐다
    • 어떤 페이지에 속하냐( 페이지번호 ) + 해당 페이지속에서 어느 위치에 속하냐( 오프셋 )
    • 그렇다. 자세히는 페이지번호+오프셋 ↔ 프레임번호 + 오프셋이 있는것이다
    • 여기서 오프셋은 페이지와 프레임이 같아야 한다
    • 그래야 올바른 주소를 찾을 수 있기 떄문이다
  • 또 문제가있다. CPU는 페이지 테이블의 주소를 어떻게 알 수 있을까? 
    • 프로세스 테이블 베이스 레지스터가 페이지 테이블 주소를 가리킨다.

 

 

페이지 교체 알고리즘

메모리는 한정되어 있기 떄문에, 스와핑이 많이 일어난다.

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

  • FIFO : 가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법을 의미
  • LRU : 참조가 가장 오래된 페이지를 바꾼다, 스택 방식을 사용함
  • NUR : 일명 clock 알고리즘이고, 먼저 0과 1을 가진 비트를 둔다. 1은 최근에 참조되었고 0은 참조 되지 않음을 의미함. 시계 방향으로 돌면서 0을 찾고 0을 찾은 순간 해당 페이지를 교체하고, 해당 부분을 1로 바꾸는 알고리즘
  • LFU : 가장 참조횟수가 적은 페이지를 교체함