운영체제 (1)

조정훈·2024년 5월 3일

운영체제 와 컴퓨터

운영체제의 역할

  1. CPU 스케쥴링과 프로세스 관리
  2. 메모리 관리
  3. 디스크 파일 관리
  4. I/O 디바이스 관리

운영체제의 구조

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

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

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


시스템콜

운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 쓴다.
예를들어 I/O 요청이 들어오면 시스템콜을 통해 커널 모드로 변환되어 실행된다. 그 뒤에 다시 유저모드로 돌아가서 그 뒤의 다음 유저 프로그램의 로직을 수행한다. 이 과정을 통해 컴퓨터 자원에 대한 직접 접근을 차단할 수 있고, 다른 프로그램으로부터 보호할 수 있다.


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


Modebit

시스템콜이 작동될 때 modebit을 참고해서 유저모드와 커널모드를 구분한다.
modebit은 1 또는 0의 값을 가지는 플래그 변수인데 카메라, 키보드 등의 I/O 디바이스는 운영체제를 통해서만 작동해야한다. 예를들어 그림처럼 카메라를 켜는 프로그램이 있다고 가정해보자. 만약 유저모드를 기반으로 카메라가 켜진다면, 사용자가 의도하지 않앗는데 공격자가 카메라를 갑자기 켤 수 있는 등 나쁜짓을 할 수 있다.
이러한 문제를 보완하기 위한 장치가 modebit이다. 0 은 커널모드, 1은 유저모드.

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




컴퓨터의 요소


CPU

Central Processing Unit.
산술논리연산장치, 제어장치, 레지스터로 구성되어있는 컴퓨터 장치를 말하며, 인터럽트에 의해 단순히 메모리에 존재하는 명령어를 해것해서 실행하는 일꾼이다.
그림처럼 관리자 역할을 하는 운영체제의 커널이 프로그램을 메모리에 올려 프로세스로 만들면 일꾼인 CPU가 이를 처리한다.

제어장치(CU)

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

레지스터

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

산술논리연산장치(ALU)

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


CPU의 연산 처리


인터럽트

인터럽트는 어떤 신호가 들어왔을 때 CPU를 잠깐 정지시키는 것을 말한다. 키보드, 마우스 등 IO 디바이스로 인한 인터럽트, 0으로 숫자를 나누는 산술 연산에서의 인터럽트, 프로세스 오류 등으로 발생한다.
인터럽트가 발생하면 인터럽트 핸들러 함수가 모여 있는 인터럽트 벡터로 가서 인터럽트 핸들러 함수가 실행된다. 인터럽트 간에는 우선순위가 있고 우선순위에 따라 실행되며 인터럽트는 하드웨어 인터럽트, 소프트웨어 인터럽트 두 가지로 나뉜다.

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

하드웨어 인터럽트

키보드, 마우스 연결 등의 IO디바이스에서 발생하는 인터럽트를 말한다.
이 때 인터럽트 라인이 설계된 이후 순차적인 인터럽트 실행을 중지하고 운영체제에 시스템콜을 요청해서 원하는 디바이스로 향해 디바이스에 있는 작은 로컬 버퍼에 접근하여 일을 수행한다.

소프트웨어 인터럽트

소프트웨어 인터럽트는 트랩(trap)이라고도 한다. 프로세스 오류 등으로 프로세스가 시스템콜을 호출할 때 발생한다.


DMA 컨트롤러

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


메모리

메모리는 전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치를 말하며, 보통 RAM(Random Access Memory)를 일컬어 메모리라고도 한다. CPU는 계산을 담당하고, 메모리는 기억을 담당한다.
공장에 비유하자면 CPU=일꾼, 메모리=작업장, 메모리의크기=작업장의크기, 작업장이 클수록 창고에 물건을 많이 넣을 수 있듯이 메모리가 크면 클수록 많은 일을 동시에 할 수 있다.


타이머

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


디바이스 컨트롤러

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




메모리 계층

  • 레지스터 : CPU안에 있는 작은 메모리. 휘발성, 속도 가장 빠름, 기억용량 가장 적음
  • 캐시 : L1, L2 캐시를 지칭. 휘발성, 속도빠름, 기억용량적음. L3캐시도 있긴하다.
  • 주기억장치 : RAM을 가리킨다. 휘발성, 속도보통, 기억용량보통
  • 보조기억장치 : HDD, SDD를 말하며 비휘발성, 속도낮음, 기억용량많음

RAM -> 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하고 이를 필요할 때마다 CPU에 빠르게 전달하는 역할을 함.
계층이 위로 올라갈 수록 가격은 비싸지는데 용량은 작아지고 속도는 빨라지는 특징이있다. 이러한 계층이 있는 이유는 경제성과 캐시 때문이다.
16GB RAM가격 > 16GB SSD가격 (경제성)

이러한 계층구조는 일상생활에서 경험할 수 있다.
게임을 실행하다 보면 '로딩중'이라는 메시지가 나올 때가 있는데 이는 하드디스크 또는 인터넷에서 데이터를 읽어 RAM으로 전송하는 과정이 아직 끝나지 않았음을 의미한다.


캐시

캐시(Cache)는 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다.이를 통해 데이터를 접근하는 시간이 오래 걸리는 경우를 해결하고 무언가를 다시 계산하는 시간을 절약할 수 있다.
실제로 메모리와 CPU의 속도차이가 너무 크기 때문에 그 중간에 레지스터 계층을 둬서 속도차이를 해결한다. 이렇게 속도차이를 해결하기 위해 계층과 계층 사이에 있는 계층을 캐싱 계층이라고 한다.
ex) 캐시메모리와 보조기억장치 사이에 있는 주기억장치를 보조기억장치의 캐싱계층이라고 할 수 있다.


지역성의 원리

캐시계층을 두지 않고 직접 캐시를 설정하고 싶을 때?
-> 자주 사용하는 데이터를 기반으로 설정해야한다. 그렇다면 자주 사용하는 데이터에 대한 근거는? 바로 지역성이다. 지역성은 시간지역성, 공간지역성으로 나뉜다.

시간 지역성

최근 사용한 데이터에 다시 접근하려는 특성을 말한다.
ex) for문 안에서 계속 커지는 변수 i 는 최근 사용했기 떄문에 계속 접근해서 +1씩 올려주는 경우

공간 지역성

최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성.
ex) for문에서 리스트의 각 요소들에 list[i] 처럼 i가 할당되며 해당 배열에 연속적으로 접근하는 경우


캐시히트와 캐시미스

캐시에서 원하는 데이터를 찾았다면 캐시히트라고 하며, 해당 데이터에 캐시가 없다면 주 메모리로 가서 데이터를 찾아오는 것을 캐시미스라고 한다.
그림처럼 캐시히트를 하면 해당 데이터를 제어장치를 거쳐 가져오게된다.
캐시히트의 경우 위치도 가깝고 CPU 내부 버스를 기반으로 작동하기 때문에 빠르다.
반면에 캐시미스가 발생되면 메모리에서 가져오게 되는데, 이는 시스템 버스를 기반으로 작동하기 때문에 느리다.

  • CPU내부버스 : CPU 내부에서의 통신에 사용
  • 시스템버스 : 스템의 다른 구성 요소 간의 통신에 사용

CPU 내부 버스는 CPU 내부에만 존재하고, 시스템 버스는 CPU와 다른 장치 간의 통신을 지원한다. 나중에 자세히 더 알아보자


캐시매핑

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


웹 브라우저의 캐시

소프트웨어적인 대표적인 캐시로는 웹브라우저의 작은 저장소 쿠키, 로컬 스토리지, 세션 스토리지 등이 있다. 보통 사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해서 추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰이며 오리진에 종속된다.

  • 쿠키
    쿠키는 만료기한이 있는 키-값 저장소이다. 만료기한을 정할 수 있는데 보통 서버에서 만료기한을 정한다.

  • 로컬 스토리지
    로컬 스토리지는 만료기한이 없는 키-값 저장소이다. 웹 브라우저를 닫아도 유지된다. HTML5를 지원하지 않는 웹 브라우저에서는 사용불가. 클라이언트에서만 수정 가능

  • 세션 스토리지
    세션 스토리지는 만료기한이 없는 키-값 저장소이다. 탭 단위로 세션 스토리지를 생성하며, 탭을 닫을 때 해당 데이터가 삭제된다. HTML5 지원하지 않는 웹 브라우저에서는 사용불가. 클라이언트에서만 수정 가능


데이터베이스의 캐싱 계층

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

0개의 댓글