페이지 테이블

페이지 테이블 엔트리(PTE)

  • present/absent bit: 해당 PTE의 사용 여부를 나타냄
  • reference bit: 해당 페이지가 접근된 적이 있는지
  • modify bit(dirty): 해당 페이지값이 변경된 적이 있는지
  • protection bit: read/write/execute 등 어떤 작업들이 허용되는지를 나타냄

 

VPN, PFN

  • 페이지 테이블은 프로세스가 가질 수 있는 페이지의 개수만큼 주소 변환 엔트리를 가짐
  • 논리 주소는 VPN(Virtual Page Number)와 offest으로 구성
  • PTE에는 PFN(Page Frame Number)를 저장하고 있으며, 물리주소는 PFN+offset이 됨
  • VPN은 페이지 테이블을 위한 인덱스일 뿐임

 

페이징의 단점

  • 내부 단편화는 여전히 존재함
  • 2번의 메모리 접근으로 인한 속도 저하TLB가 등장
    • 페이지 테이블도 DRAM에 저장되어 있음
    • 결국 (1)페이지 테이블과 (2)실제 물리 주소 와 같이 2번 접근이 필요
  • 한 프로세스당 하나의 페이지 테이블이 존재하고, 한 주소당 하나의 PTE를 사용하기 때문에 테이블에 해당하는 용량이 많아질 수 있음

 


TLB(Translation Lookaside Buffer)

MMU with TLB

  • TLB란 MMU에 소속된 칩으로, 메모리와 CPU 사이에 있는 주소 변환을 위한 캐시
  • 페이지 테이블에 있는 리스트를 보관하며 CPU가 페이지 테이블까지 가지 않도록 해 속도를 향상시킬 수 있는 캐시 계층
  • 자주 참조되는 가상-물리주소 변환 정보를 저장

 

TLB의 문제점

  • TLB 정보는 이를 탑재시킨 프로세스에서만 유효함
  • 즉, 다른 프로세스가 동작할 때는 필요없는 정보가 TLB에 남게됨

 

단점 해결 방법

  1. 프로세스 context switching 시 TLB를 비우기
    • 빈번하게 발생할 경우 성능에 부담이 됨
  2. TLB 내에 프로세스를 식별하기 위한 주소 공간 식별자 필드를 추가
    • ASID(Address Space Identifier) 라고 함
    • 각각의 task마다 ID를 고유로 부여하며 이를 ASID에 표시하여 저장

 


페이지 테이블의 종류

Multilevel(Hierarchy) Page Table

 

Hashed Page Table

  • 각 항목은 연결 리스트를 가지고 있고, 해시 원소는 세 개의 필드(가상 페이지 번호, 매핑 프레임 번호, 다음 주소)를 가짐
  • 논리적 주소 공간의 페이지 번호인 p를 해시한 결과값으로 테이블을 검사한 뒤, 해당 물리적 메모리를 찾아가게 됨
  • 64bit 시스템에서는 클러스터형 페이지 테이블을 사용함
    • 해시형 페이지에서 각 항목들이 한 개의 페이지만 가리키는 대신 각 항목들이 여러 개의 페이지를 가리키는 방식
    • 따라서 한 개의 페이지 테이블 항목이 여러 페이지 프레임에 대한 매핑 정보를 지닐 수 있음
    • 메모리 접근이 불연속적이면서 전 주소 공간으로 넓게 퍼져 나오는 경우에 유용

 

Inverted Page Table의 특징

https://www.youtube.com/watch?v=5cVGNOnFnvo

  • 기존 페이지 테이블
    • 보통 프로세스는 각자 하나씩 페이지 테이블을 가짐
    • 각 페이지 테이블 항목의 개수가 너무 많아질 수 있다는 단점이 있음
  • 역페이지 테이블
    • 논리적 주소가 아니라 물리적 메모리 주소 입장에서 만들어진 테이블 구조
    • 각 메모리 프레임마다 할당하여 페이지 테이블의 엔트리 개수 = 메모리 프레임의 수
    • 시스템에는 단 하나의 페이지 테이블만이 존재하여 메모리에서 훨씬 작은 공간을 점유
    • 몇 번째 프레임인지에 대한 정보가 아니라, 프로세스의 번호 pid를 저장

 

Inverted Page Table의 주소 계산 방법

  • 기존 테이블들의 경우에는 pageno를 인덱스로 하여 페이지 테이블에 바로 접근했지만, 역페이지 테이블의 경우 전체 테이블의 항목을 서치하며 해당 데이터와 일치하는 값을 찾아야 함
  • 따라서 메모리를 절약하는 대신, 탐색 시간이 오래걸릴 수 있다는 단점이 존재

⇒ 여기에 해시 테이블을 추가로 사용해 탐색 개수를 줄일 수 있음

Inverted 방식의 단점

  • 메모리 공유 불가
    • 모든 페이지와 프레임은 일대일 대응 관계이므로 프로세스간 메모리 공유가 불가능
    • 같은 프로세스 안에서도 페이지가 다르면 데이터 공유가 불가능
  • 페이지 테이블 참조 오버헤드
    • 주소의 매핑은 매우 빈번하게 일어나는데, 그때마다 테이블에서 pid/p 값을 찾아야함
    • 최악의 경우 페이지 테이블의 끝까지 탐색해야 하기 때문에 오버헤드가 굉장히 심함
    • 프로세스마다 페이지 테이블을 가지는 경우 페이지 테이블의 인덱스는 논리적 주소의 page#와 동일하기 때문에 바로 접근할 수 있지만, 역페이지 방식의 경우 메모리의 프레임 위치기 때문에 논리적 주소로 바로 접근이 불가능함

 


References

단편화 문제

내부 단편화(interal fragmentation)

  • 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상

 

외부 단편화(external fragmentation)

  • 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상

 

메모리 집약/통합

  • 외부 단편화를 해결하기 위한 방법으로 메모리 집약(Compaction)이 있으나 비용이 매우 많이 듦
  • 이외에도 인접한 외부 단편화 두 공간을 합치는 통합(coalescing) 방법도 있음


연속 할당

프로세스를 메모리에 올릴 때 주소 공간을 메모리에 연속적으로 적재하는 방식

고정 분할 방식(fixed partition allocation)

https://zangzangs.tistory.com/133#:~:text=연속할당 기법은 프로세스,분할 방식으로 나뉩니다.

  • 메모리를 미리 나누어 각 분할에 하나의 프로세스를 적재하는 방식
  • 분할의 크기는 모두 동일할 수도 있고 서로 다를 수도 있음
  • 동시에 메모리에 올릴 수 있는 프로그램의 수가 고정되어 있으며 수행 가능한 프로그램의 최대 크기가 제한되어 융통성이 떨어짐
  • 내부 단편화와 외부 단편화 문제가 발생할 수 있음

 

가변 분할 방식(variable partition allocation)

https://zangzangs.tistory.com/133#:~:text=연속할당 기법은 프로세스,분할 방식으로 나뉩니다 .

  • 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용하는 방식
  • 프로그램의 크기를 고려해 메모리를 할당하고 기술적으로 관리할 수 있는 기법이 필요
  • 내부 단편화는 발생하지 않고 외부 단편화는 발생할 수 있음
  • 프로세스 종료 후 메모리에서 삭제되면 해당 공간이 비게 되면서, 새로운 프로그램을 적재하고자 할 때 어떤 가용공간에 올릴 것인지 결정하는 문제(동적 메모리 할당)가 생김

 

동적 메모리 할당 알고리즘

  • 어느 메모리 공간에 프로세스를 올려야 하는지 결정하는 알고리즘
  • Best Fit이 이론적으로는 ‘메모리’를 가장 효율적으로 활용할 수 있는 방법이지만, 그게 최선의 방법이라는 의미는 아님
  • First Fit이 가장 좋은 성능을 보임
알고리즘   동작 방식
First Fit 리스트를 순서대로 스캔하며 크기에 맞는 빈 공간을 찾음
Next Fit 빈 공간들을 기억해 두었다가 차례대로 검색을 시작
Best Fit 모든 엔트리를 탐색하여 가장 근접한 크기를 찾음
Worst fit 항상 가장 큰 빈 공간을 할당
Quick fit 자주 요청되는 공통 크기의 메모리 공간들을 서로 다른 리스트로 관리

 


불연속 할당

- 메모리를 동일한 크기의 페이지(보통 4KB)로 나누고 프로그램마다 페이지 테이블을 두어 이를 통해 메모리에 프로그램을 할당하는 것
- 자세한 주소 매핑 방법은 이쪽 포스팅을 참고

프레임과 페이지

  • 프레임: 주기억장치를 고정된 크기로 나누어 만든 파티션(물리적 개념)
  • 페이지: 프로세스를 고정된 크기로 나누어 만든 조각(논리적 개념)

 

페이징(Paging)

https://luv-n-interest.tistory.com/472

  • 메모리와 프로세스를 동일한 크기의 페이지 단위로 나누어 할당하는 것
  • 동적 메모리 할당 문제가 없어지지만 주소 변환이 복잡해짐
  • 코드, 데이터, 스택 등이 서로 다른 프레임에 쪼개질 수 있기 때문에 권한 작업이 어려워짐
  • 그림에서 p는 page number, d는 page offeset을 나타냄

 

세그멘테이션(segmentation)

https://velog.io/@kdy9kdy/CS-운영체제16-메모리

  • 의미 단위인 세그먼트로 나누는 방식으로, 크기가 동일하지 않음
  • 코드, 데이터, 스택, 힙 등은 물론, main과 같은 함수도 의미 단위로 사용할 수 있음
  • 페이징과 비슷하게 세그먼트 정보를 저장하는 세그먼트 테이블이 프로그램별로 존재하게 됨
  • 공유와 보안 측면에서 좋으며 홀 크기가 균일하지 않은 문제가 발생

 

페이지드 세그멘테이션(paged segmentation)

https://velog.io/@kdy9kdy/CS-운영체제16-메모리

  • 페이지와 세그먼트 방식을 혼합한 것으로, 한 세그먼트가 여러 개의 페이지로 구성됨
  • 홀이 생기는 문제가 없고, 메모리에 페이지 단위로 올라가기 때문에 allocation 문제가 발생하지 않음

 


References

페이지 폴트

정의 및 특징

  • 가상 메모리(프로세스의 주소 공간)에는 존재하지만 실제 메모리인 RAM에는 없는 데이터/코드에 접근할 경우 페이지 폴트가 발생함
  • 페이지 폴트 발생 시 운영체제는 해당 데이터를 메모리로 가져와 마치 페이지 폴트가 발생하지 않은 것처럼 계속해서 동작하게 해줌
  • 스와핑: 각 프로세스의 전체를 가져와 실행하고 다시 디스크에 넣는 방식
  • 가상 메모리: 프로그램의 일부분만이 메모리에 존재해도 실행할 수 있음

 


가상 메모리(virtual memory)

정의 및 특징

  • 한정된 메모리를 효율적으로 활용하기 위해 운영체제가 메모리를 관리하는 기법 중 하나
  • 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 매모리로 보이게 만드는 것
  • 가상적으로 주어진 주소를 가상 주소(logical address)라고 하며, 실제 메모리 상에 있는 주소를 실제 주소(physical address)라고 함
  • 가상 주소는 메모리 관리 장치(MMU)에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있게 됨
  • 가상 메모리는 가상 주소와 실제 주소가 매핑되어 있고 프로세스의 주소 정보가 들어있는 ‘페이지 테이블’로 관리되며, 속도 향상을 위해 TLB를 사용함

 

메모리 추상화가 없다면

  • (a)와 (b)는 각각 하나의 프로그램이며, 둘이 함께 메모리에 올라간 상황(c)
  • JMP 명령어에서 주소 재배치가 필요해지면서, 결국 여러 프로그램을 함께 실행하기 어려워짐
  • 프로그램이 모든 메모리 바이트에 접근할 수 있고, 운영체제를 포함한 다른 프로그램을 쉽게 지워버릴 수 있다는 점에서 안정성 문제가 존재
  • 가상 주소는 물리적인 저장 위치에 대해서 독립적이기 때문에 주소를 재배치하지 않아도 됨

 


논리/물리주소 변환

BASE/LIMIT 레지스터

  • 각 프로세스의 주소 공간을 물리 메모리의 서로 다른 공간으로 연속적으로 매핑하는 방식
  • 우선 논리 주소와 limit register값(프로그램의 크기)를 비교하여 범위를 벗어난다면 에러가 발생
  • limit보다 작다면 base register값(프로그램의 시작 위치)를 더해 물리 주소를 만듦
  • 일련의 과정은 모든 메모리 접근에서 일어나며, 매번 덧셈과 비교 연산이 요구된다는 단점이 있음(덧셈은 캐리 전파 때문에 시간이 많이 걸림)
  • 이 방식은 초기 컴퓨터에서 많이 사용되었으나 최근에는 CPU가 제공하는 보다 효율적인 방법으로 교체되어 현재는 거의 사용되고 있지 않음

 

페이징 기법

https://lordofkangs.tistory.com/211

  • 이후에 알아볼 페이징 기법은 데이터를 비연속적으로 저장하기 때문에 관리하는 테이블이 필요
  • 비연속적인 물리주소를 연속적인 논리주소로 표현한 것
  • 이러한 변환 과정을 MMU가 수행해주어, 비연속적으로 메모리가 할당되었어도 임의접근(Random-Access)이 가능해짐

 

  • 논리주소의 페이지 번호를 통해 물리주소의 프레임 번호를 파악함
  • 페이징 기법은 주기억장치의 프레임과 프로세스의 페이지를 동일한 크기로 자르기 때문에, 논리주소의 오프셋을 그대로 물리주소로 받아오면 됨
  • 오프셋은 10bit로 되어있으므로 1024가지 주소를 표현할 수 있으며, 이것을 1K라 부름

 


스와핑(swapping)

정의 및 특징

  • 실제로는 모든 프로세스를 메모리에 적재할 수는 없음
  • 페이지 폴트가 발생했을 때 메모리에서 당장 사용하지 않는 영역에 하드디스크의 일부분을 불러와 사용하여 마치 페이지 폴트가 일어나지 않은 것처럼 만드는 것이 스와핑임

 

페이지 폴트와 스와핑의 과정

페이지 vs 프레임
- 페이지: 가상 메모리를 사용하는 최소 크기 단위
- 프레임: 실제 메모리를 사용하는 최소 크기 단위
  1. CPU가 물리 메모리를 확인하여 해당 페이지가 없으면 트랩을 발생해서 OS에 알림
  2. OS는 CPU의 동작을 잠시 멈춤
  3. OS가 페이지 테이블을 확인하여 가상 메모리에 페이지가 존재하는지 확인
    • 없으면 프로세스를 중단하고 현재 물리 메모리에 비어 있는 프레임이 있는지 찾음
    • 물리 메모리에도 없다면 스와핑이 발동됨
  4. 비어 있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화함
  5. 중단되었던 CPU를 다시 시작함

 


메모리 관리

메모리 조각

  • 빗금 부분은 현재 사용되지 않는 메모리 공간을 나타내며, 이것들을 메모리 조각(Memory Compaction)이라 함
  • 메모리 할당은 프로세스가 새로 메모리에 들어오거나 없어질 때마다 바뀜
  • 흩어져있는 메모리 조각들을 모아 큰 공간으로 합칠 수 있음

 

비트맵을 통한 메모리 관리

  • (b)는 메모리 할당 단위가 1k일 때, 1k 당 1bit로 사용 여부를 표현한 것
  • (c)는 동일한 정보를 linked list로 표현한 것으로, 공간들의 정보를 저장함
  • 만약 프로그램이 4.1kb를 사용한다면 5k를 차지하므로 여전히 메모리 낭비가 존재
  • 할당 단위를 더 작게 한다면 더 많은 메모리를 활용 가능하나, 그만큼 bitmap은 커지게 됨
  • 이러한 검색은 시간이 많이 걸린다는 단점이 있음

 

연결 리스트를 통한 메모리 관리

  • 링크드 리스트를 활용한 방식은 프로세스가 종료되거나 swap out될 때 관리를 쉽게 해줌
  • 그림은 프로세스 X가 제거될 경우, 이웃의 상태에 따른 4가지 종류를 나타냄
  • 단순히 엔트리의 키값을 변경하거나(a), 전체 리스트 엔트리 개수가 줄어듦(b, c, d)으로서 이중 연결 리스트로 구현하는 것이 더 편리하다는 것을 알 수 있음

 


References

메모리 계층

정의 및 특징

  • CPU는 그저 메모리에 올라와 있는 프로그램의 명령어들을 실행할 뿐임
  • 메모리 계층이란 메모리를 필요에 따라 여러 종류로 나눈 것
  • 각 레벨은 하위 레벨의 캐시로서 동작함

 

메모리 종류

메모리  정의  휘발성  속도  기억 용량
레지스터 CPU 안에 있는 작은 메모리 휘발성 가장 빠름 가장 적음
캐시 L1, L2 캐시를 지칭 휘발성 빠름 적음
주기억장치 RAM을 가리킴 휘발성 보통 보통
보조기억장치 HDD, SSD를 일컬음 비휘발성 느림 많음
  • 램은 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하고 이를 필요 시마다 cpu에 빠르게 전달하는 역할을 함
  • 계층 위로 올라갈수록 가격은 비싸지는데 용량은 작아지고 속도는 빨라짐

 


캐시 메모리

등장 배경

  • 컴퓨터가 발전해감에 따라 프로세서의 발전 속도를 메인 메모리가 따라가지 못함
  • 프로세스가 아무리 빨라도 계산에 필요한 데이터를 얻기 위해서는 메인 메모리에 접근해야 했기 때문에 전체적인 시스템 성능 향상에 한계가 생김
  • 따라서 CPU와 메인 메모리 사이에 캐시를 두게 됨

 

정의 및 특징

  • 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 임시 메모리
  • 데이터를 접근하는 시간이 오래 걸리는 경우를 해결하고 반복된 연산의 시간을 절약할 수 있음
  • 이렇게 속도 차이를 해결하기 위해 두 계층 사이에 있는 계층을 캐싱 계층이라고 함
  • 캐시 메모리와 주기억장치 사이에서 정보를 옮기는 것을 사상(Mapping)이라고 함

 

캐시의 종류

  • L1 캐시: 일반적으로 CPU 칩 안에 내장되어 데이터 사용/참조에 가장 먼저 사용됨
  • L2 캐시: L1보다 느리나 용량이 더 큼
  • L3 캐시: 멀티 코어 시스템에서 코어가 공유하는 캐시

 

캐시의 전송 단위

https://ssoonidev.tistory.com/35

  • 워드(word)
    • CPU의 기본 처리 단위로, 블록/라인을 구성하는 기본 단위임
  • 블록(block)
    • 메모리를 기준으로 잡은 캐시와의 전송 단위
    • 캐시 라인과 크기가 같으며, 메모리 블록은 여러 개의 워드로 구성되어 있음
  • 캐시라인
    • 캐시에 데이터를 저장할 때 특정 자료구조를 사용해 묶음으로 저장하는 것
    • 캐시에 저장하는 데이터에는 메모리 주소 등을 기록해준 태그를 달아놓을 필요가 있으며, 이러한 태그들의 묶음을 캐싱 라인이라고 함
    • 캐시는 여러 개의 캐시 라인으로 이어져 있으며, 메모리로부터 가져올 때도 캐싱 라인을 가져옴

 

지역성의 원리

  • 캐시가 효율적으로 동작하기 위해서는 캐시의 적중율(Hit-rate)를 극대화해야 함
  • 어떤 데이터가 자주 사용되는가에 대한 근거로 사용되는 것이 바로 “지역성
  • 시간 지역성(temporal locality)
    • 특정 데이터가 한번 접근되었을 경우, 가까운 미래에 또 접근할 가능성이 높은 것
    • 예를 들어 for 반복문에서는 계속해서 변수 i에 접근이 이뤄짐
  • 공간 지역성(spatial locality)
    • 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성을 말함
    • 예를 들어 하나의 일차원 배열에 연속적으로 접근하는 경우가 있음

 

캐시히트와 캐시미스

  • 캐시 히트의 경우: 캐시에서 원하는 데이터를 찾음
  • 캐시 미스 & 메모리에서 찾았을 경우: 메모리 → 캐시 메모리 → CPU 레지스터에 복사
  • 캐시 미스 & 메모리에서 찾지 못했을 경우: 보조기억장치 → 메모리 → 캐시 메모리 → CPU 레지스터에 복사
  • 캐시히트의 경우 위치도 가깝고 CPU 내부 버스를 기반으로 작동하기 때문에 속도가 빠름
  • 반면 캐시미스는 메모리에서 가져오며, 시스템 버스를 기반으로 작동하기 때문에 느림

 


캐시 매핑

캐시 매핑의 필요성

  • 캐시에 데이터를 저장했어도 그 위치를 모른다면 시간이 오래 걸리게 됨
  • 캐시매핑이란 주기억장치에서 메모리로 데이터를 전송하는 방법으로 3가지가 존재함
  • 레지스터는 주 메모리에 비하면 굉장히 작고 주 메모리는 굉장히 크게 때문에 작은 레지스터가 캐시 계층으로써 역할을 잘 해주려면 이 매핑을 어떻게 하느냐가 중요함

 

직접 매핑(directed mapping)

  • 데이터가 캐시에 들어올 때 이미 자리가 정해져있는 방식으로, 블록 단위로 저장됨
  • 메모리가 1~100이 있고 캐시가 1~10이 있다면 1:1~10, 2:1~20… 이런 식으로 매핑하는 것
  • 처리가 빠르지만 캐시를 자주 교체해야 해서 적중률이 낮음
  • 메모리 주소 구성
    • 태그: 메인 메모리의 몇번째 블록인지를 알려줌
    • 라인: 같은 위치에 저장되는 00000과 00100을 구분하기 위함
    • 워드: 블록의 크기를 나타냄(00000, 00001)

 

연관 매핑(associative mapping)

  • 직접 매핑의 단점을 보완하기 위해 등장
  • 메인 메모리의 순서와 아무런 관련 없이 저장
  • 모든 블록을 탐색해야 해서 속도가 느리지만 적중률이 높음
  • 혹은, 병렬 검사를 위해 복잡한 회로가 필요함

 

집합 연관 매핑(set associative mapping)

  • 직접 매핑과 연관 매핑을 합쳐놓은 것
  • 메모리는 1~100, 캐시는 1~10이 있다면 캐시 1~5에는 1~50의 데이터를 무작위로 저장시키는 것을 말함
  • 세트 번호로 영역을 탐색하여 연관 매핑의 병렬 탐색을 줄임
  • 모든 라인에 연관 매핑처럼 무작위로 위치하여 직접매핑의 단점도 보완함

 

캐시 쓰기 정책

https://velog.io/@khsfun0312/캐시-정책알고리즘

 

 


캐시의 활용

웹 브라우저의 캐시

  • 보통 사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해 추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰임
  • 쿠키
    • 4KB까지 데이터를 저장할 수 있는 key-value 저장소
    • 클라이언트 또는 서버에서 만료기한 등을 정할 수 있는데, 보통 서버에서 설정
  • 로컬 스토리지
    • 만료기한이 없는 key-value 저장소로, 클라이언트에서만 수정 가능
    • 10MB까지 저장할 수 있으며 웹 브라우저를 닫아도 유지
  • 세션 스토리지
    • 만료기한이 없는 key-value 저장소로, 클라이언트에서만 수정 가능
    • 탭 단위로 세션 스토리지를 생성하며, 탭을 닫을 때 데이터도 삭제
    • 5MB까지 저장 가능함

 

데이터베이스의 캐싱 계층

  • 데이터베이스 시스템을 구축할 때도 메인 데이터베이스 위에 redis DB 계층을 ‘캐싱 계층’으로 두어 성능을 향상시키기도 함

 


References

컴퓨터의 요소

하드웨어 구성

https://codybuilder.com/27

  • 크게 연산을 담당하는 CPU, 기억을 담당하는 메모리, 입출력 장치로 나눌 수 있음
  • 시스템 버스는 각 요소들과 연결되어 있고 데이터와 명령 제어 신호를 각 장치로 실어 나름

 

데이터 접근 방식

  • 순차접근
    • 데이터를 순차적으로 접근하는 방식
    • 데이터의 위치에 따라 접근 시간이 달라짐
  • 임의접근
    • 어디든 접근할 수 있다고 하여 임의접근, 랜덤접근이라 불림
    • 기억 장소에 관계없이 동일한 접근 시간이 소요됨
    • 임의접근이 잘 되도록 만든 장치가 바로 RAM

 


중앙처리장치(CPU, Central Processing Unit)

CPU의 역할

  • 인터럽트에 의해 단순히 메모리에 존재하는 명령어를 해석해서 실행하는 일꾼
  • 운영체제의 커널이 프로그램을 메모리에 올려 프로세스로 만들면 일꾼인 CPU가 이를 처리함
  • 주기억장치에서 프로그램 명령어와 데이터를 읽어와 처리하고 명령어의 수행 순서를 제어함

 

CPU의 구성

  • CPU는 산술논리연산장치, 제어장치, 레지스터로 구성
  • 산술논리연산장치(ALU): 비교와 연산을 담당
  • 제어 장치: 명령어의 해석과 실행을 담당
  • 레지스터: 속도가 빠른 데이터 기억장소

 

제어 장치(CU, Control Unit)

  • 명령어를 순서대로 실행할 수 있도록 제어하는 장치
  • 컴퓨터를 구성하는 모든 장치들은 제어장치의 제어를 받음
  • 명령어 레지스터에서 프로그램 명렁어를 꺼내 해독하고, 그 결과에 따라 필요한 제어 신호를 연산장치, 기억장치, 입출력장치로 보냄
  • 또한 장치가 보낸 신호를 받아 다음에 수행할 동작을 결정함

 

레지스터

  • CPU 안에 있는 고속 임시 기억장치
  • CPU와 직접 연결되어 있어 연산 속도가 메모리보다 수십~수백 배 빠름
  • CPU는 자체적으로 데이터를 저장할 방법이 없기 때문에 레지스터를 거쳐 데이터를 전달함
  • 명령어 주소, 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장
  • 기능에 따라 다양한 종류로 나눠짐

 

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

  • 제어장치의 명령에 따라 실제로 연산을 수행하는 장치
  • 덧셈, 뺄셈 같은 두 숫자의 산술 연산과 배타적 논리합, 논리곱 같은 논리 연산을 계산
  • 연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보냄

 

CPU의 동작 과정

  1. 제어장치가 메모리와 레지스터에 계산할 값을 로드함
  2. 제어장치가 레지스터에 있는 값을 계산하라고 산술논리연산장치에 명령함
  3. 제어장치가 계산된 값을 다시 레지스터에서 메모리로 저장함

 


기억 장치(Memory)

정의 및 특징

  • CPU는 계산을 담당하고, 메모리는 기억을 담당함
  • 메모리가 크면 클수록 많은 일을 동시에 할 수 있음
  • 주기억장치와 보조기억장치로 분류됨

 

주기억장치(Main Memory)

  • 물리적인 디스크가 아니라 컴퓨터 내부에서 현재 CPU가 처리하고 있는 내용을 저장하고 있는 기억장치
  • 보조 저장장치보다 저장 용량이 적지만, 속도가 빨라 실행되는 프로그램이 적재되어 있음
  • CPU는 store과 load의 방식으로 기억장치에 엑세스
  • ROM(Read Only Memory)
    • 전원이 끊겨도 기록된 데이터가 소멸되지 않는 비휘발성 메모리
    • 오직 기억된 데이터를 읽기만 가능한 장치
  • RAM(Random Access Memory)
    • 읽고 쓰기가 가능하며 임의 접근이 가능함
    • 응용 프로그램, 운영체제 등을 불러와 CPU가 작업할 수 있도록 하는 기억장치
    • 전원을 끄면 데이터가 사라지는 휘발성 메모리이나 속도가 빠름

 

보조기억장치(Secondary Memory)

  • 물리적인 디스크가 연결되어 있는 기억 장치
  • 주기억장치보다 속도는 느리지만 가격이 저렴하고 저장 용량이 더 큼
  • 컴퓨터의 전원을 끄더라도 저장된 데이터가 사라지지 않는 비휘발성을 가짐
  • HDD(Hard Disk Driver)
    • 물리적인 디스크를 고속으로 회전시켜 데이터를 저장하는 장치
    • SSD의 등장으로 많이 소멸되는 추세
  • SSD(Solid-State Driver)
    • 흔히 쓰는 USB가 발전된 형태
    • 물리적으로 회전하거나 움직이는 요소가 없으며, 전기적으로 데이터를 저장함
    • 속도가 HDD보다 훨씬 빠르나 가격이 비쌈

 

데이터 적재/저장

  • 니모닉: 기계어를 인간이 인식할 수 있는 것으로 바꾸어주는 것

  • 적재(Load)
    • 기억장치에 저장된 데이터를 읽어 CPU의 레지스터로 적재
    • 주소 버스를 통해 CPU가 요구하는 데이터의 주소값과 제어 버스를 통해 Read 신호가 전달
  • 저장(Store)
    • CPU이 레지스터에서 기억장치의 특정 주소에 데이터를 저장
    • 주소 버스를 통해 특정 주소와 제어 버스를 통해 Write 신호가 전달
  • 워드(Word)
    • CPU가 한 번에 접근하는 데이터를 의미
    • CPU가 지원하는 비트 수와 크기가 같음
    • 32bit CPU에서는 32bit, 64bit CPU에서는 64bit

 


기타

시스템 버스(System Bus)

  • 컴퓨터의 각 구성요소 간 데이터, 신호를 전달하기 위한 데이터 전달 통로

  • 데이터 버스: CPU와 기억장치/입출력장치 사이에서 데이터를 전달하는 ‘양방향’ 버스
  • 주소 버스: CPU가 기억장치/입출력장치에게 데이터를 보내기 위해 주소를 전달하는 ‘단방향’ 버스
  • 제어 버스: 데이터 버스와 주소 버스를 제어하기 위한 신호를 전달하는 ‘양방향’ 버스로, CPU가 Memory를 Read할지, Write할지에 대한 정보를 전달

⇒ 몇 번지에 데이터가 존재하는지 주소를 싣고 다니고(address bus), 해당 번지수의 데이터를 받아 싣고 다니며(data bus), 이 데이터를 보낼건지 받을건지의 신호를 싣고 다님(control bus)
 

DMA 컨트롤러

  • IO 디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치
  • CPU에만 너무 많은 인터럽트 요청이 들어오기 때문에 CPU 부하를 막아주며 CPU 의 일을 부담하는 보조 일꾼
  • 하나의 작업을 CPU와 DMA 컨트롤러가 동시에 하는 것을 방지함

 

타이머

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

 

디바이스 컨트롤러

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

 


References

정의 및 특징

운영체제란(Operating System)

  • 컴퓨터의 시스템 자원들을 효율적으로 관리함으로써 성능을 높이고, 사용자에게 편의성을 제공하기 위해 사용됨
  • 사용자와 컴퓨터 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종
  • 운영체제와 유사하나 소프트웨어를 추가로 설치할 수 없는 것을 펌웨어(firmware)라고 함

 

운영체제의 역할

  1. 자원 관리
    • 프로세스 관리
      • 프로세스 스케줄링을 통한 CPU 소유권 할당 및 동기화
      • 프로세스 생성과 제거, 시작과 정지, 자원 할당 및 반환
    • 메모리/주변장치 관리
      • 한정된 메모리를 어떤 프로세스에 얼마나 할당할지
      • 디스크 파일을 어떻게 보관할지
      • 입출력 장치 스케줄링 및 전반적인 관리
    • 파일 관리
      • 파일의 생성과 삭제, 변경, 유지 등
  2. 자원 보호
    • 프로그램이나 다른 사용자가 중요 데이터에 접근하지 못하게 컴퓨터 자원들을 보호

 

운영체제의 목적

  • 처리능력, 사용 가능도, 신뢰도 향상
  • 응답 시간 감소
응답시간 (Turn Around Time) 작업 의뢰 후 시스템에서 결과가 얻어질 때까지의 시간
처리능력 (Throughput) 시스템의 생산성을 나타내는 단위. 일정기간 동안 처리하는 일의 양
사용가능도 (Availability) 시스템을 얼마나 빠르게 사용할 수 있는가의 정도
신뢰도 (Reliability) 주어진 문제를 얼마나 정확하게 처리하는가의 정도

 


운영체제의 구조

전체적인 구조

  • 유저 프로그램이 맨 위에 있고 가장 밑에 하드웨어가 위치
  • 가운데 인터페이스, 시스템콜, 커널, 드라이버 부분이 운영체제를 지칭함

 

인터페이스

https://youtu.be/onMSNY45giw

  • 사용자는 커널에 직접 접근할 수 없기 때문에 OS가 제공하는 인터페이스를 사용해야 함
  • 대표적으로 GUI(Graphical User Interface)CLI(Command Line Interface)가 있음
  • 사용자와 애플리케이션은 인터페이스를 통해 커널에 명령을 전달하고, 실행결과를 전달받음
  • 참고로 GUI가 없고 CUI만 있는 리눅스 서버도 있음

 

커널과 쉘

  • 커널
    • 운영체제의 핵심으로, SW와 HW간의 커뮤니케이션을 관리하는 프로그램
    • SW로부터의 요청을 HW가 처리할 수 있도록 요청을 반환하는 역할을 함
    • 프로세스, 메모리, 저장장치를 관리하는 핵심적인 기능을 수행
    • 알맹이, 핵심이라는 뜻을 가짐
    • 사용자와 OS 간에 대화를 가능하게 해주는 명령어 해석기 역할
    • 커널과 애플리케이션의 인터페이스 역할
    • 껍데기, 주변이라는 뜻을 가짐

 

시스템 호출(system call)

  • 운영체제가 커널에 접근하기 위한 인터페이스로, 커널이 자신을 보호하기 위해서 만든 인터페이스
  • 애플리케이션이 직접 하드웨어 자원에 접근하거나 수정하여 중요 데이터가 소실되는 실수를 방지하기 위해 시스템콜을 사용
  • 즉 애플리케이션이 하드웨어에 접근해야 하거나 OS가 제공하는 서비스를 이용하기 위해서는 커널 함수를 호출하는 시스템 콜을 사용해야 함
  • 시스템 콜을 제공함으로써 OS는 컴퓨터 자원을 보호하게 됨

 

드라이버

  • 커널과 하드웨어의 인터페이스를 드라이버라고 함
  • 보통 커널은 입출력의 기본적인 부분만 제작하여 마우스, 키보드같은 하드웨어는 별다른 설치 없이 작동하게 됨
  • 프린터나 스캐너같이 복잡한 하드웨어의 경우 제작사가 만든 SW를 따로 설치해서 사용해야 하며, 이때 이 SW를 디바이스 드라이버라고 함

 


시스템 콜

동작 방식

  • 시스템 콜은 인터럽트 중 하나인 소프트웨어 인터럽트(Trap)의 한 종류
  • 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 사용
  • 유저 프로그램이 I/O 요청으로 트랩(trap)을 발동하면 올바른 I/O 요청인지 확인한 후 유저 모드가 시스템 콜을 통해 커널 모드로 변환되어 실행

 

예시

  • readFile()이라는 함수가 발동했다고 가정하자
  • 유저 모드에서 파일을 바로 읽지 않고 커널 모드로 들어가 읽음
  • 다시 유저 모드로 돌아가 그 뒤에 있는 유저 프로그램의 로직을 수행함
  • 이 과정을 통해 컴퓨터 자원에 대한 직접 접근을 차단할 수 있고 프로그램을 다른 프로그램으로부터 보호할 수 있음

 

전체적인 흐름

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

 

modebit의 역할

  • modebit은 1또는 0 값을 가지는 플래그 변수(0은 커널 모드, 1은 유저 모드)
  • 시스템콜이 작동될 때 이를 통해 유저 모드와 커널 모드를 구분
  • 카메라, 키보드 등 I/O 디바이스는 운영체제를 통해서만 작동해야 함
  • 커널 모드를 거쳐 운영체제를 통해 작동한다고 해도 외부에 의해 악용되는 경우를 100% 막을 수는 없지만, 막기가 더 쉬움

 

  • 유저 프로그램이 카메라를 이용하려고 할 때 시스템 콜을 호출하고 modebit을 1에서 0으로 바꾸며 커널 모드로 변경
  • 그 후 카메라 자원을 이용한 로직을 수행
  • modebit을 0에서 1로 바꿔 유저 모드로 변경하고 이후 로직을 수행

 


운영체제의 주요 과정

부트스트래핑(bootstraping)

  • 운영체제를 메인 메모리에 적재하는 과정을 부팅, 또는 부트스트래핑이라고 함
  • ROM에는 부트로더(부트스트랩 로더)라는 소규모 프로그램이 있으며, 하드디스크와 같은 보조기억장치에 저장된 OS를 메인 메모리에 적재하는 기능을 함
    • ROM: 비휘발성으로 메모리에서 극히 일부를 차지(수 KB)
    • RAM: 휘발성으로 메모리의 대부분을 차지하며 실제 프로그램이 할당되는 곳(수 MB~GB)

 

  • 컴퓨터의 전원이 켜지면 부트 로더의 과정, 즉 “부팅”이 일어남
    1. 프로세서(CPU)에서 ROM에 있는 내용을 읽음
      ROM 안에는 POST(Power-On Self-Test)와 부트로더가 저장되어 있음
    2. POST는 전원이 켜지면 가장 처음에 실행되는 프로그램으로 현재 컴퓨터의 상태를 검사함
    3. POST 작업이 끝나면 부트 로더가 실행됨
    4. 부트 로더는 하드디스크에 저장되어 있는 OS를 찾아 메인 메모리(RAM)에 가져옴
  • OS는 컴퓨터의 전원이 꺼지는 시점에 종료됨

 

인터럽트(Interrupt)

  • 현재 실행 중인 프로그램을 중단하고 다른 프로그램의 실행을 요구하기 위해 발생하는 명령
  • 다중 프로그래밍을 위해 없어서는 안될 기능
  • 키보드, 마우스 등 IO 디바이스로 인한 인터럽트, 0으로 숫자를 나누는 산술 연산에서의 인터럽트, 프로세스 오류 등으로 발생
  • 인터럽트 간에는 우선순위가 있고 우선순위에 따라 실행

 

https://velog.io/@adam2/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8

  • 하드웨어의 인터럽트
    • Timer, 키보드/마우스 입력, DMA 등
    • 시스템 버스를 통해 물리적 신호가 CPU로 전달됨
  • 소프트웨어의 인터럽트
    • 시스템 콜로써 구현될 수 있음
    • 인터럽트 요청 신호에 따라 인터럽트 함수(인터럽트 서비스 루틴)가 실행됨
    • 인터럽트 핸들러 함수가 모여있는 인터럽트 벡터를 통해 인터럽트 핸들러 함수가 실행됨
    • 인터럽트 발생 시 이전 실행 정보를 스택 영역에 저장하고 있어야 이후 다시 프로그램을 이어서 실행할 수 있음

 


References

+ Recent posts