페이지(page), 페이징(paging)

 

가상 메모리는 페이지라는 고정 크기의 블록으로 나누어지고

 

물리 메모리는 프레임이라는 고정 크기의 블록으로 나누어입니다.

 

즉, 고정적인 데이터이며 시스템에 의해서 할당받는 메모리입니다. (물리적 내용의 단위)

 

페이징은 페이지로 가상 메모리를 분할하여 메모리를 할당하고 주소변환을 하는 기법입니다.

 

 

 

세그먼트(segment), 세그멘테이션(segmentation)

 

페이지 같은 개념이지만 같은 크기가 아니라 서로 다른 크기의 블록으로 나누는 개념입니다. (논리적 내용의 단위)

 

가변적인 데이터이며 사용자의 필요에 의한 메모리입니다. (malloc, calloc ... )

 

세그멘테이션은 가상 메모리를 세그먼트로 분할하여 메모리를 할당하고 주소변환을 하는 기법입니다.

 

세그먼트는 논리적 단위여서 중요도에 따라서 나눌 수 도 있고, 용도에 따라서 나눌 수 있어 보호와 공유에 용이합니다.

 

페이지와 다르게 미리 메모리를 분할해둘 수 없고(크기가 가변적) 사용자 관점의 가상 메모리 관리 기법입니다.

 

내부 단편화는 발생하지 않지만 외부 단편화 발생 가능성이 있습니다. (분할된 크기보다 프로그램의 크기가 더 큰 경우 )

 

이를 해결하기 위해 세그먼트를 다시 페이징하는 방법이 있습니다.

 

 

세그먼트 테이블, 페이지 테이블은 사용자가 정의한 주소를 실제 주소로 맵핑하는 정보

 

세마포어와 뮤텍스는 상호배제 기법입니다.

 

세마포어(Semaphore)

 

https://adithyaravik.wordpress.com/2015/03/31/semaphore-vs-mutex-vs-monitor/

멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법으로 사용합니다.

 

세마포어 S는 정수값을 가지는 변수(Counter 라고도 표현)이며 P와 V라는 명령에 의해서만 접근할 수 있습니다.

 

S는 공유 자원에 접근할 수 있는 프로세스의 개수를 나타내는 변수로 볼 수 있습니다.

 

P는 임계구역에 들어가기 전에 수행되고 V는 임계구역에서 나올 때 수행됩니다..

 

P는 wait() 함수와 매칭되고 V는 signal() 함수와 매칭됩니다.

 

이해하기 쉽게 예를 들어보겠습니다. 회사에 프린터가 2개가 있다고 가정합시다. (S가 2인 상태입니다.)

 

여기서 1명이 프린터를 사용하면 S가 1로 변하고 또 1명의 사람이 프린터를 사용하면 S가 0이 됩니다.

 

그리고 추가로 1명이 사용을 하려면 S가 0이기 때문에 기다려야 합니다.

 

사용중인 1명이 사용이 끝나면 S가 1로 바뀌어서 사용이 가능해지죠. 

 

세마포어는 뮤텍스와 다르게 소유 개념이 없습니다.

 

교착상태에 대한 고전적인 해법이며 모든 교착상태를 해결해주진 못합니다.

 

임계영역(Critical Section)

 

공유자원에 접근하는 프로세스 내부의 코드영역으로

 

서로 다른 두 프로세스 혹은 스레드가 같이 접근해서는 안 되는 공유 영역입니다.

 

상호 배제

 

한 프로세스가 공유자원을 접근하는 임계영역 코드를 수행하고 있으면

 

다른 프로세스들은 공유 자원을 접근하는 임계영역 코드를 수행할 수 없다는 조건,

 

상호배제 방법에는 세마포어, 뮤텍스, 모니터 등이 있다.

 

 

뮤텍스(Mutex)

 

https://adithyaravik.wordpress.com/2015/03/31/semaphore-vs-mutex-vs-monitor/

세마포어가 공유자원의 여러 프로세스의 접근을 막는다면 뮤텍스는 쓰레드의 접근을 막습니다.

 

그리고 뮤텍스는 2개 이상의 쓰레드 접근을 막습니다.

 

임계영역 안에 1개의 스레드가 이미 작업 중(Lock)이면 다른 스레드는 간섭할 수 없습니다.

 

일종의 Binary Semaphore라고 볼수 있습니다.

 

일종의 Locking 매커니즘입니다.

 

위의 프린터 예제로 보면 뮤텍스의 경우 프린터가 1개인 경우죠.

 

여기서 세마포어는 뮤텍스가 될 수 있지만 뮤텍스는 세마포어가 될 수 없습니다.

 

 

세마포어와 뮤텍스을 설명하는 글을 보면

 

세마포어와 뮤텍스 모두 프로세스 혹은 스레드의 접근을 제어한다고 나와있는 경우도 있고

 

세마포어는 프로세스, 뮤텍스는 스레드와 연관이 있는 것처럼 설명해놓은 글이 많습니다.

 

무엇이 정확한 표현인지는 모르겠습니다.

 

 

프로세스와 스레드

 

프로세스 : 실행되고 있는 프로그램, 운영체제로부터 시스템 자원을 할당받는 작업의 단위

 

스레드 : 프로세스 내에서 실행되는 여러 흐름의 단위

 

멀티 프로세스 : 문맥 교환 중 오버헤드 발생

 

멀티 스레드 : 프로세스를 생성하여 자원을 할당하는 시스템콜이 줄어들어 자원을 효율적으로 관리 가능

 

동기화 문제, 설계하기가 까다로운 단점이 있습니다.

 

 

 

 

 

아무튼 뮤텍스와 세마포어를 정리하자면

 

둘다 공유자원에 대한 프로세스 혹은 스레드의 접근을 제어하는 것이고

 

차이점은 세마포어는 여러개의 프로세스가 사용이 가능하고, 뮤텍스는 오로지 1개의 스레드만 사용이 가능하다는 점! 

작업 집합, 작업 세트, 작업 셋 (Working Set)

 

실행중인 프로세스가 자주 참조하는 페이지들의 집합입니다.

 

Working Set는 스레싱을 예방하기 위해 존재합니다.

 

스레싱(Thrashing)이란?

https://www.studytonight.com/operating-system/virtual-memory

다중 프로그래밍 정도가 높아지면서(동시 실행 프로세스 수 증가) 메모리에 페이지 폴트가 많이 일어나

 

프로그램 수행보다 페이지 교환이 더 많이 일어나는 현상

 

결국 성능의 저하를 초래합니다. 악순환 같은 느낌입니다.

 

시스템 콜, 시스템 호출

https://www.linuxbnb.net/home/adding-a-system-call-to-linux-arm-architecture/

Shell(User mode) -> Kernel(Kernel mode)

 

사용자 모드에 있는 응용프로그램이 커널의 기능을 사용하게 하는 인터페이스입니다.

 

여기서 커널의 기능이란 다음과 같습니다.

 

프로세스 관리(fork, signal, load, wait time)

파일시스템 관리(open, read, write, close)

메모리 관리(alloc, kmalloc, kfree)

통신 관리(socket, bind)

주변장치 관리(request devices, attach, detach) 등등..

입출력 제어 방식은 크게 4가지가 있습니다.

 

1. 프로그램에 의한 I/O (CPU 개입 O)

2. 인터럽트에 의한 I/O (CPU 개입 O)

3. DMA에 의한 I/O      (CPU 개입 X)

4. 채널에 의한 I/O      (CPU 개입 X)

 

이제 DMA에 대해서 알아보겠습니다.

 

DMA(Direct Memory Access) 직접 메모리 접근

 

DMA는 주변장치(하드디스크, 그래픽 카드 등)들이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능입니다. 

 

중요한 건 CPU의 개입 없이 I/O 장치와 기억장치 사이의 데이터를 전송하는 접근 방식이라는 거죠.

 

PIO(Programmed Input/Output)은 CPU가 주변장치와 데이터를 주고받는 방식으로 효율이 떨어지는 방식입니다.

 

이를 극복하기 위해 DMA가 개발되었습니다.(IBM)

https://www.quora.com/What-is-the-function-of-DMA-in-a-computer

CPU 개입 없이라는 부분이 중요한 포인트입니다.

 

다른 관점으로 보면 CPU가 해야할 주변장치와의 데이터 전송을 DMA장치가 해주는 것이죠.

 

그만큼의 CPU 효율을 늘릴 수 있습니다.

 

고속의 I/O 장치의 경우 빈번한 인터럽트가 발생하는데 DMA를 사용함으로써

 

프로그램 수행 중 인터럽트의 발생 횟수를 최소화합니다.

 

DMA가 없다면 Data I/O 처리가 끝날 때까지 CPU는 대기해야 합니다.

 

 

동작 절차 : CPU 명령 - 버스 사용 요구(Bus Request) - 버스 사용 허가(Bus Grant) - 데이터 전송 - 인터럽트

 

동작모드 

 

1. 사이클 스틸링 : CPU가 DMA에 우선순위를 양보, 1 Cycle 정지, 빠른 입출력 가능, 한 번에 한 워드 전송

 

사이클 스틸링은 인터럽트와 많이 비교됨, 인터럽트는 1Cycle이 아니라 처리 기간 동안 정지

 

사이클 스틸링은 프로그램 상태 보존 필요 X, 반면에 인터럽트는 필요함

 

2. 버스트 모드 : DMA가 버스 사용권 획득 시 데이터 전송 완료까지 버스 사이클 독점, 블록 단위 데이터 전송

 

 

 

채널 제어 방식 - 여러 장치가 채널 제어기에 입출력 명령을 전달하여 CPU 개입 없이 입출력을 수행합니다.

 

DMA와 다르게 한 개의 명령에 여러 블럭 입출력 가능합니다.

 

DMA - PC, 채널 제어 - 대형서버

 

 

 

 

 

'전자공학 > 임베디드' 카테고리의 다른 글

Working Set 이란? (+스레싱)  (0) 2019.10.21
시스템 콜(System Call)이란?  (0) 2019.10.21
MMU란?(+TLB)  (0) 2019.10.20
CISC, RISC  (0) 2019.10.20
반가산기, 전가산기, 반감산기, 전감산기  (0) 2019.10.20

MMU(Memory Management Unit)

 

가상 메모리와 실제 메모리 사이에서 주소 변환 역할을 합니다.

 

CPU가 메모리에 접근하는 것을 관리하는 컴퓨터 하드웨어 부품이죠.

 

MMU는 가상 메모리와 실제 메모리 주소 사이의 변환을 위해

 

TLB(Translation Lookaside Buffer)라는 고속의 보조기억장치를 참조합니다.

위키백과

여기서 만약 TLB에 원하는 변환 정보가 없다면 TLB ->Page Table -> Disk 순으로 접근합니다. 

 

 

 

 

 

 

'전자공학 > 임베디드' 카테고리의 다른 글

시스템 콜(System Call)이란?  (0) 2019.10.21
DMA(Direct Memory Access)란? (+PIO, 채널제어방식)  (2) 2019.10.20
CISC, RISC  (0) 2019.10.20
반가산기, 전가산기, 반감산기, 전감산기  (0) 2019.10.20
MCU, MPU, CPU  (0) 2019.10.20

마이크로프로세서의 구성요소는 명령세트, 레지스터, 메모리 등이 있습니다.

 

여기서 명령세트는 CISC, RISC로 구분됩니다.

CISC(Complex Instruction Set Computer)란?

 

모든 고급언어 문장에 기계 명령어가 대응되게 한 컴퓨터입니다.

 

즉, 하드웨어화 할 수 있는 것은 모두 하드웨어에게 맡긴다고 볼 수 있습니다..

 

그리고 특징이 명령어의 길이가 가변적입니다.

 

명령어가 복잡하여 해석(디코딩) 시간이 오래걸리며, 해석하는 회로가 복잡합니다.

 

가격이 비싸고 발열이 많고 전력소모가 많습니다.

 

메모리 사용이 효율적이라는 장점이 있습니다.

 

주로 볼 수 있는 컴퓨터가 CISC방식이며 인텔, 모토롤라, AMD가 대표적인 예입니다.

 

 

RSIC(Reduced Instruction Set Computer)란?

 

CISC의 많은 명령어 중 주로 쓰이는 몇가지만 추려서 하드웨어로 구현한 것입니다.

 

실행 속도를 높히기 위해 가능한 복합한 처리는 소프트웨어에게 맡기는 컴퓨터죠.

 

각 명령어가 한 클럭에 실행되도록 고정되어서 파이프라인 성능에 최적화 되어있습니다.

 

명령 길이가 고정되어 있어서 코드 효율이 낮습니다.

 

실행하는데에 상대적으로 많은 명령어가 필요합니다.

 

속도가 빠르다는 장점이 있습니다.

 

저장공간을 많이 차지한다는 단점이 있습니다.

 

워크스테이션, 대형서버가 주로 RISC 방식이며 ARM이 대표적인 예입니다.

반가산기 : 1비트의 두 입력과 출력으로 합과 자리올림을 계산하는 논리회로

전가산기 : 2진수 A와 B 그리고 하위비트의 자리올림을 포함하여

 

2진수 입력 3개를 덧셈 연산하는 논리회로

반감산기 : 2진수 1자리의 두 개의 비트를 빼는 회로

전감산기 : 아랫자리에서 요구하는 빌림 수 에 대한 감산까지 계산

 

'전자공학 > 임베디드' 카테고리의 다른 글

MMU란?(+TLB)  (0) 2019.10.20
CISC, RISC  (0) 2019.10.20
MCU, MPU, CPU  (0) 2019.10.20
PCB(Process Control Block) + 문맥교환  (0) 2019.10.20
크로스컴파일러(Cross Compiler)  (0) 2019.10.19

MCU, MPU, CPU 다 비슷해 보여서 정리를 해보려고 합니다.

 

MCU(Micro Controller Unit) 

집적 회로 안에 프로세서, 메모리, 입출력 버스 등의 컴퓨팅 요소를 내장한 초소형 컨트롤러

 

단일 또는 다중의 CPU와 타이머, PWM, I/O, 통신 등의 주변장치까지 포함하여 부르는 용어입니다.

 

하나의 작은 컴퓨터라고 생각하면 됩니다.

 

 

CPU(Central Processing Unit)

컴퓨터에서 구성단위 중 기억, 해석, 연산, 제어라는 4대 기능을 종합하는 장치

 

컴퓨터의 뇌라고 생각하면 됩니다.

 

제어장치(Control Unit), 연산장치(ALU), 레지스터(Resister) 이렇게 세 부분으로 구성됩니다.

 

 

MPU(Micro Processor Unit)

CPU를 단일 IC 칩에 집적시켜 만든 소자

 

주변장치가 없다면 동작이 불가능합니다.

 

 

 

일반적으로 CPU와 MPU는 거의 같은 의미로 사용되며

 

CPU는 컴퓨터에서 사용되는 용어고 MPU는 임베디드에서 사용됩니다.

 

 

 

우선 Serial 통신에 대해서 알고 가겠습니다.

 

시리얼 통신을 이해하려면 Parallel 통신하고 비교해서 이해하는게 편합니다.

 

만약 8비트의 데이터 0x00100111을 보낸다면 

다음과 같이 통신이 이뤄집니다.

 

이제 시리얼 통신의 종류를 알아보겠습니다.

 

UART(Universal Asynchronous Receiver Transmitter)

 

비동기식 통신(Clock 신호가 없음)입니다.

 

Baud Rate은 비동기 통신의 속도입니다.

 

여기서 BPS와 Baud Rate를 확인하고 가겠습니다.

 

BPS : Bit Per Second 즉 1초에 전송되는 비트 수 입니다.

 

Baud Rate : 1초에 데이터가 변조되는 횟수입니다. 다른 말로 하면 1초에 전송되는 신호의 수 입니다.

 

BPS = Baud Rate x 한 번에 변조되는 비트 수

 

시리얼 통신에서는 주로 bps = baud rate입니다.

 

RS-232, RS-422, RS-485와 같은 표준이 있습니다.

https://developer.electricimp.com/resources/uart

UART 프레임입니다. Parity Bit는 통신 오류를 확인할 수 있는 데이터 입니다. 

 

패리티 비트와 CRC는 무엇인가?

데이터는 오류에 민감합니다. 은행을 예로 들면 10만 원을 송금했는데 100만 원이 송금되면 큰일 나겠죠. 오류가 1개 났을 뿐인데 말이죠. 반면에 음성신호는 오류에 민감하지 않은 편입니다. 따라서 데이터 전송..

kkhipp.tistory.com

기본 옵션으로는 패리티 비트를 사용하지 않습니다. 기본 프레임은 Start Bit(1) + Data(8) + Stop Bit(1)입니다.

 

SPI(Serial Peripheral Interface)

동기식 통신방식, Full-Duplex(송신을 하면서 수신이 가능한 통신 방식)입니다. 

 

모토로라에서 제안하였고 SPI는 아래의 4개의 선이 있습니다.

https://en.wikipedia.org/wiki/Serial_Peripheral_Interface

1. MOSI : Master Out, Slave In

2. MISO : Master In, Slave Out

3. SCK : 동기 통신에 필요한 Clock

4. CS : Chip Seleck, 데이터를 수신할 기기 선택 신호

구현이 쉽고 속도가 빠르다는 장점이 있습니다.


1:n통신이 가능하지만 CS(칩 인가)신호 만큼의 선이 필요하다는 단점이 있습니다.

 

기기와 기기간, 칩과 칩간의 근거리 통신으로 많이 사용됩니다.


I2C(Inter-Integrated Circuit) 

역시나 동기식 방식이며 Half Duplex(송수신이 동시에 불가) 방식입니다.

 

데이터신호와 클럭신호, 2선으로만 구성되어 있습니다.

https://www.analog.com/en/technical-articles/i2c-primer-what-is-i2c-part-1.html#

1. SDA : Data 신호

2. SCK : Clock 신호

SPI와 마찬가지로 1:n 통신이 가능하며 n의 수가 늘어도 2개의 선으로만 할수 있다는 장점이 있습니다.
 
속도는 SPI보다 느립니다. 

'전자공학 > 통신' 카테고리의 다른 글

FTP 와 TFTP, TCP 와 UDP  (0) 2019.10.16
Big Endian vs Little Endian  (0) 2019.10.16
CAN 통신이란? + LIN, FlexRay  (0) 2019.03.18
OFDM 시스템 구조  (0) 2018.09.06
이동통신 시스템에서의 채널추정 방법(파일럿 신호)  (0) 2018.08.29

+ Recent posts