[Linux] CPU/Memory/Thread

정재훈·2022년 4월 7일
0

Linux

목록 보기
11/19
post-custom-banner

CPU 동작원리

CPU 아키텍처

CPU는 0과 1로 구성되는 명령어를 하나씩 수행하는 장치
CPU가 동작할 명령어들을 Disk(HDD)에서 명령어를 저장하고 한줄씩 가져온다.
문제 : 모터의 성능으로 작동되는 Disk는 느리고 CPU는 빠르기 때문에 CPU 효율이 떨어진다.

해결방안 : 폰노이만 아이디어 = 프로그램 내장방식

폰노이만 아키텍처

메모리에 모든 명령어를 집어넣고 메모리에서 한개씩 빼오는 방식

Loading(Load 작업) : 저장장치(HDD)에 저장된 0과 1 명령어들이 메모리에 한꺼번에 복사된다.
프로그램 전체를 불러오기 때문에 시간이 꽤 걸린다. 이제 메모리에서 CPU로 명령어를 전달한다.

한계점 : HDD에서 명령어를 전달하는거에 비해 빨라진긴 했지만, CPU 성능 대비 느린건 여전하다.

메모리 개념 및 메모리 종류

메모리 : 빠른성능, 저장장치 처럼 저장하는 기능을 갖지만, 전원을 끄면 모두 소멸하는 장치
휘발성 : DRAM, SRAM
비휘발성 : EEPROM, Flash Memory

DRAM vs SRAM

속도차이 : CPU > 메모리 > 저장장치
SRAM : 속도가 빠르다, 비싸다, 밀도가 낮다(부피가 커서, 생산량이 떨어진다.)
DRAM : 속도가 느리고, 싸다, 밀도가 크다(부피가 작아서, 생산량이 좋다.)

현재 CPU 아키텍처

메모리는 DRAM을 사용하고 CPU안에 내장 메모리를 SRAM을 사용한다.
DRAM에서 SRAM에 여러줄 명령어를 한꺼번에 보낸다. SRAM 용량이 작아 모든 명령어를 한꺼번에 전달하지는 못한다.
명령어는 한줄씩 SRAM과 CPU 코어와 주고받는다. DRAM에서 받은 명령어를 SRAM에서 다 수행했을 경우, 그제서야 DRAM에서 또 전달받는다. 이 SRAM을 Cashe 메모리라고 한다.

SRAM(Static RAM) : Cache 메모리
DRAM(Dynamic RAM) : Main 메모리

참고) HIT vs MISS

캐쉬메모리에서 필요로 하는 정보가 메모리에 존재하면 HIT 없으면 MISS

프로그램 개념

프로그램 : CPU의 2진수 명령어들의 집합
프로그램을 실행하면 메모리에 적재(Loading) 된다.
프로세스 : 실행된 프로그램을 뜻함
프로세서 : 프로그램을 실행하는 칩셋(HW)

메모리 구조

역할 : 0과 1로 된 CPU 명령어를 저장하는 역할, 변수가 만들어지는 공간
메모리 공간은 여러개의 프로세스 공간으로 나뉘고, 각 프로세스는 소스코드 공간과 변수들이 만들어질 공간으로 나뉩니다.
서로 다른 프로세스 끼리는 변수값들을 공유할 수 없다. (참고. IPC 이용하면 가능)

하나의 Process는 text/data/bss/stack/heap으로 세그먼트 구성된다.

  1. text : 코드 영역
  2. data : 초기화된 전역변수
  3. bss : 초기화 안된 전역변수, 초기값이 없bss, 전역변수가 0으로 자동 초기화되는 것은 bss에 저장된 변수들을 0으로 초기화시키기 때문이다.
  4. stack : 지역변수가 저장되는 공간
  5. heap : malloc(메모리 공간 생성 명령어)으로 만든 변수들

멀티테스킹

다중 process

하나의 CPU 코어는 한번에 한가지 동작만 수행합니다. 한 프로세스를 수행하면 다른 프로세스는 멈춰있는 상태가 된다.
CPU 코어가 하나라면 여러개의 프로세스를 멀티테스킹 한다고 하면 매우 빠른 속도로 하나씩 돌아가면서 수행하게 된다.
다중 process는 커널에서 지원을 해줘야 가능합니다.
Fireware 개발 level에서는 힘들고 RTOS 또는 Linux OS를 올려 개발해야 합니다.

다중 Thread

Thread : 한 프로세스 내에서 동시에 동작되도록 하는 것이지만, 순서는 보장이 되지 않는다.
Thread POSIX API를 사용할 줄 알면 쉽게 동시작업 프로그래밍이 가능하다.
다중 Thread는 운영체제가 API로 지원해줘야한다.

OS

OS는 다른 프로그램을 감시하고 관리하는 기능을 합니다. 컴퓨터터의 자원관리 및 스케쥴링을 하는 소프트웨어 입니다.

profile
여러 방향으로 접근하는 개발자
post-custom-banner

0개의 댓글