전체 글 57

read/write과 sendfile 방식 비교

Context Switching이란 커널 모드와 사용자 모드 간의 전환을 의미합니다.현재 실행 중인 사용자 프로세스 (user mode) -> 커널 코드 (kernel mode)로 전환하거나 그 반대로 바뀌는 것을 말하는데 이 전환은 OS 레벨에서 이루어집니다. 예를 들어 read 호출 시 사용자 코드가 실행되며 시스템 콜이 발생하고, user mode에서 kernel mode로 전환되게 됩니다. 커널 에서 해당 fd를 확인하고 디스크로부터 실제 데이터를 읽고 커널 내부 버퍼에 복사를 수행합니다. 커널은 내부 함수를 사용하여 사용자 공간 버퍼로 데이터를 복사한뒤 작업이 끝나면 Kernel mode에서 User Mode로 돌아갑니다. 따라서 read, write는 2번의 context switch가 발생하..

C++ 2025.06.20

12. [C++] atomic/ mutex/ spin lock

멀티 코어 환경에서 동기화 자원의 접근을 보장하는 방법은 여러가지가 있습니다. 대표적인 방법으로는 os 가 제공하는 동기화 방법인 mutex와 cpu의 하드웨어 명령어를 직접사용하는 atomic 방법이 있습니다. 추가로, 락이 풀릴 때까지 무한 루프를 돌며(cpu를 계속 점유하며) 대기하는 방식인 스핀락이 있습니다. 오늘은 이 세가지 방식에 대해서 알아보겠습니다. 1. mutexmutex 방식은 스레드가 자원을 사용하려고 할 때 lock을 걸어 (sleep) 대기하여 동기화 자원의 접근을 보장하는 방법입니다. 이는 운영체제 커널이 관리하는 락 메커니즘을 사용하며, 락을 잡지 못한 스레드는 대기 상태(sleep)로 들어가면서 다른 스레드가 CPU를 쓸 수 있도록 해줍니다. 그래서 락이 풀릴 때까지 해당 ..

C++ 2025.06.15

11. [C++] 파티션 메모리 복사 (dd 명령어, 파일 입출력)

개요eMMC와 같은 저장 장치는 하나의 물리적 장치입니다.이 장치를 논리적으로 나누는 것을 파티션이라고 하는데, 저장장치 안에서 영역을 구분해주는 역할을 합니다.리눅스와 같은 운영체제에서는 커널 내부에 VFS(Virtual File System)이라는 추상화 계층이 있어 여러 파일 시스템과 장치 파일을 통합 관리합니다. eMMC와 같은 특정 하드웨어에 유저가 접근하려면, VFS가 유저의 요청을 디바이스 드라이버로 전달하고, 드라이버가 하드웨어와 직접 통신하여 데이터를 읽거나 씁니다. 따라서 유저는 직접 물리 메모리에 접근하지 않고, 커널을 통해 메모리와 하드웨어 자원에 접근할 수 있습니다. 리눅스 커널 내부의 VFS(Virtural File System)는 /proc, /sys, /dev 와 같은 가상 ..

C++ 2025.06.03

10. [C++] 가중치가 없는 그래프에서 사이클 탐지 및 지름 구하기

문제)N개의 정점과 M개의 간선을 가진 가중지가 없는 그래프 G가 주어진다. 그래프 G 에서 사이클을 이루는 노드들이 존재할 경우 사이클에 포함된 노드를 제거한 이후 남은 노드 및 간선에서 가장 먼 두 노드의 거리를 출력한다. 예시 입력)10 111 22 33 13 44 55 62 78 99 10 단계1. 가중치가 없는 양방향 그래프를 구성한다. : 연결 확인 시 어느 방향으로든 이동 가능한 경우 graph[A].push_back(B), graph[B].push_back(A)로 인접리스트 구현#include #include #include using namespace std;const int MAX = 100005;vector graph[MAX];int main() { int N, M; ci..

C++ 2025.06.03

09. [C++] 벡터와 리스트에서의 erase/remove 사용법

벡터와 리스트에서의 erase 사용법에 대해 알아보기 전에 벡터와 리스트를 잠시 비교해보겠습니다.vector와 list는 모두 sequence container로, sequence container에는 forward_list, list, deque, vector, array 등이 있습니다. list의 경우에는 bidirectonal iterator를 사용하는 이중 연결리스트(앞뒤 이동만 가능)이고, vector의 경우에는 contiguous iterator를 사용하는 연속된 배열(Random access 지원)이다. vector는 인덱스 접근이 빠르고 메모리를 효율적으로 사용할 수 있다는 장점이 있지만 연속된 배열이기 때문에 앞이나 중간에 데이터를 삽입하거나 삭제하면 해당 원소의 뒤 원소들을 모두 이동..

C++ 2025.06.01

07 차량 플랫폼 - 차량용 SOC칩과 ARM core

개요ARM 코어는 ARM 에서 설계한 프로세서 코어로, 저전력 및 고효율성을 목표로 합니다. ARM은 ARM 코어의 설계를 라이선스화하여 칩 제조사들이 이를 기반으로  자신들의 SOC(System on Chip)을 설계할 수 있도록 합니다. ARM의 역사를 살펴보면, ARM은 1990년대 초 영국의 에이콘 컴퓨터가 설립한 벤처 자회사로 시작하였습니다.ARM은 당시 최고의 성능에 초점을 맞추어 CPU를 출시한 인텔에 대응하여, 저전력에 초점을 맞추어 CPU를 개발하게 됩니다. 컴퓨터 시스템에 널리 쓰이던 인텔의 x86아키텍처는 CISC(Complex Instruction Set Computing)아키텍터로 복잡한 명령어로 여러가지 작업을 수행할 수 있지만, 전력 소비가 높고 열을 많이 발생시키는 단점이 있..

차량 플랫폼 2024.08.01

06. 차량 플랫폼 - SoC칩 메모리 계층 구조

1. 개요차량에서 처리하는 데이터가 많아지고 고속 통신을 요구하면서 차량 제어기에서 SoC 칩의 중요성이 커지고 있습니다.최근 대부분의 SoC 칩은 CMOS 기술을 기반으로 설계되고 있는데, SoC 칩 설계에서 널리 사용되고 있는 이유는 다음과 같습니다.첫째, 낮은 전력소비입니다. CMOS는 전류가 흐르지 않을 때 전력이 거의 소모되지 않아 대기상태에서 전력 소모를 최소화할 수 있습니다. 또한 CMOS 트랜지스터의 스위칭 활동 중에만 전력을 소모하므로, 효율적인 동적 전력 관리가 가능합니다.둘째 전력 관리 측면입니다. CMOS 기반 SoC 칩은 여러 방식의 슬립모드를 지원하여 각 상황에 맞는 최적의 전력 소모를 구현할 수 있습니다. 또한 전력 게이팅/클럭 게이팅 기술을 사용하여 각 블록의 전력 소모를 세..

차량 플랫폼 2024.06.29

08. C++_string class와 관련 기능

string 클래스는 C++ STL에서 제공하는 클래스로, 말 그대로 문자열을 벡터와 같이 다룰 수 있게 해주는 클래스 입니다.C에서는 char* 또는 char[] 의 형태로 문자열을 다뤘다면, C++에서는 문자열을 하나의 변수 타입처럼 사용하며, std::string은 C++표준 라이브러리의 일부분으로 문자열 처리를 위한 다양한 기능을 제공합니다. C++의 std::string 클래스와 C의 문자열을 다루는 방식에는 몇 가지 중요한 차이가 있습니다. 이 차이점들은 주로 사용의 메모리 관리, 사용의 편의성, 기능성 등에서 나타냅니다. 1. 메모리 관리C문자열은 메모리 관리를 사용자가 직접 해야합니다. 문자열의 크기를 미리 할당해야 하고, 필요에 따라 메모리를 할당하거나 해제해야 합니다. 이로 인해 메모리..

C++ 2024.06.16

05. 차량 플랫폼 - MCU 프로그래밍 ISR

1. RTOS의 Task 관리RTOS에서 프로그램 실행의 기본단위는 Task입니다. Task는 이해하기 쉽게 말하면 무한루프이면서, 한가지 작업을 수행하고, 리턴 값이 없는 함수라고 할 수 있습니다. Scheduler는 OS의 일부로, 각 Task에 부여된 우선순위를 기준으로 CPU를 점유할 다음 Task를 결정해주는 역할을 합니다. OS에서 여러개의 Task를 갖는 응용프로그램을 만들면 Scheduler가 이를 빠르게 번갈아 가며 수행합니다. 각각의 Task는 고유한 우선순위를 가지고 있으며, 스케쥴러는 그 우선순위를 기준으로 Task를 관리합니다.  2. ISR(Interrupt Service Routine) 과 인터럽트의 정의ISR(Interrupt Service Routine)은 MCU가 외부 또..

차량 플랫폼 2024.06.13

04. 차량 플랫폼 - MCU 게이트웨이 기능과 메모리

차량이 통신하는 데이터의 양이 증가하면서 게이트웨이 작업을 수행할 때 필요한 MCU의 성능 요구사항이 높아지고 있습니다. MCU가 이더넷을 지원하면 차량 게이트웨이 기능을 수행할 수 있지만, MCU가 차량 게이트 웨이 기능을 충분히 수행할 수 있는지는 네트워크 트래픽 관리, 프로토콜 변환, 데이터 처리 등의 기능을 고려해야합니다.  MCU의 내장메모리는 크게 ROM과 RAM으로 나뉩니다. ROM에는 Flash memory와 EEPROM이 있고, RAM에는 주로 SRAM이 사용됩니다. MCU의 보조모듈로는 SPI, UART, I2C, ADC, DAC, 타이머 등이 사용됩니다. 가장 먼저 고려해야할 요소는 CPU처리 성능입니다. 차량 게이트웨이는 다양한 네트워크 트래픽을 실시간으로 처리해야하기 때문에 복잡한..

차량 플랫폼 2024.06.06