[운영체제] Context switching이 발생하는 과정과, 오버헤드가 생기는 이유
·
소프트웨어/운영체제
기술면접을 대비해 '1일 1기술면접 질문 답변하기' 운동(?)을 하는 요즘이다. 알고 있다고 생각하는 개념도 막상 설명하려고 하니 막히는 부분이 있어서 하나하나 집요하게 정리해보고자 한다. 설명할 수 있는 것만이 진짜 이해한 것이니!질문"컨텍스트 스위칭(Context Switching)이 발생하는 과정과, 이때 오버헤드가 발생하는 구체적인 이유를 설명해 주세요."답변더 높은 우선순위 프로세스가 Ready 큐에 들어왔거나, 현 프로세스 루틴 종료 등의 이유로 컨텍스트 스위칭이 발생하며, 현 프로세스의 스택 포인터, CPU 레지스터 값, 프로세스 상태 및 메모리 정보 등 해당 프로세스의 실행 흐름에 관한 정보가 PCB에 저장되고 전환하려는 프로세스의 문맥 데이터가 로드되면서 문맥 전환이 이뤄집니다. 이 과정..
[Linux] crosstool-ng 빌드시 'Retrieving needed toolchain components' 에러 디버깅
·
Embedded Systems/리눅스
https://docon.tistory.com/122 에서 crosstool-ng을 설치하고, arm-cortex_a8-linux-gnueabi 툴체인을 선택해, 몇가지 사항들을 바꿔준 뒤 툴체인을 빌드하였다. 그러나 빌드 명령을 입력하니 아래와 같은 오류가 떴다.jh@jh-ubuntu:~/Desktop/BBB/crosstool-ng$ ./ct-ng build[INFO ] Performing some trivial sanity checks[WARN ] Number of open files 1024 may not be sufficient to build the toolchain; increasing to 2048[INFO ] Build started 20260326.222404[INFO ] Buil..
[ARM] Armv7의 Processor Mode(동작 모드) + 조금의 익셉션
·
Embedded Systems/Arm 아키텍처
이 글은 김동현(Austin Kim)님의 '시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리' 책을 참고하여 작성하였음을 밝힙니다! Armv7에는 동작모드라는 개념이 Armv7 아키텍처에서 가장 중요한 개념이라고 한다. 그 이유는 익셉션, 트러스트존과 같은 Armv7 아키텍처의 많은 기능들이 동작 모드 기반 위에서 설계되어 있기 때문이다.동작모드는 어떻게 바뀔까?동작모드가 바뀌면 이전 동작모드는 어떻게 확인할까?이전 동작모드로는 어떻게 복귀할까?동작모드를 활용해 OS커널은 어떻게 구성돼 있을까?요 질문들을 던지면서 프로그래밍하고 코드를 분석하면 공부가 더 잘 될거라고 한다.렛츠고! 1. Armv7 아키텍처의 동작 모드PL과 동작 모드의 관계Arm 코어에는 Privilege Level(특권 레벨..
[Arm] '#' immediate value(즉치값) 너는 누구니?
·
Embedded Systems/Arm 아키텍처
Arm 어셈블리 명령어를 공부하면서 #는 숫자를 표현하는 방식이라고만 이해했는데, 깊게 들어가니 즉치값이라는 키워드가 나왔고, 이 부분이 속도 향상과도 연관이 되는 듯 하여 더 자세히 알아보았다. 출처를 보니, immediate values(operand)를 이렇게 정의한다.Immediate Operands An immediate operand in computer science refers to a data value encoded within an instruction itself, used for operations like loading registers. It has a maximum value that varies among instructions but is limited to 2^32 in..
[C] C의 함수호출규약(calling convention) / caller와 callee
·
소프트웨어/C
어셈블리어에서 함수의 매개변수를 말할 때, 레지스터와 스택 이야기가 나오는 부분이 헷갈려서 정리해보고자 한다. 출처: https://www.geeksforgeeks.org/cpp/calling-conventions-in-c-cpp/'함수 호출 규약' 이름에 힌트가 있듯, 함수를 어떻게 호출할지에 관한 규칙들을 의미한다. 함수 호출 규약을 이해하기 위해 선행되어야 하는 지식이 있다. 바로 caller와 callee!caller 와 callee요 놈들도 이름에 힌트가 있듯이, subroutine을 부르는 함수측을 caller라고 하고, caller에게 불리는 함수를 callee라고 한다.int myFunc(void) { return 100;}int main(void) { myFunc(); ret..
[Linux] 를 이해하기 위해 일단 비글본블랙에 올려보자. - 툴체인 만들기
·
Embedded Systems/리눅스
시스템 소프트웨어 개발자가 주로 하는 일 중엔 갓 구운 따끈한 보드에 OS를 올리는 Bring-up 업무가 있다고 한다. 그리고 이를 잘 하기 위해선? Booting Process를 잘 숙지하고 있어야 한다고 한다. 그래서! 책 '임베디드 리눅스 프로그래밍 완전정복'와 유튜브 강의를 참고해서, 비글본블랙에 Linux를 올려보면서 디버깅 역량 및 부팅 프로세스를 체득해보고자 한다. 요 글은 책 '임베디드 리눅스 프로그래밍 완전정복, 프랭크 바스케즈-크리스 시먼스, 에이콘 출판서(2024)'을 참고하여 썼음을 밝힙니다. SoC 비글본블랙에 Linux를 올리기 위해 무엇을 알아야 할까?책 1장 p49를 보면 다음과 같은 내용이 나온다. 모든 임베디드 리눅스 프로젝트는 '툴체인', '부트로더', '커널', '루..
[Linux] gnueabi vs gnueabihf 차이를 이해해보자(ABI)
·
Embedded Systems/리눅스
비글본블랙을 부팅시키는 과정에서 툴체인을 만지다 보니, arm-linux-gnueabi, arm-linux-gnueabihf, arm-none-eabi 같은 이름을 자주 보게 된다. 저 뒤에 붙는 단어들(gnueabi 등등)이 구체적으로 무엇을 의미하는지 궁금해 파헤쳐보았다. gnueabi, gnueabihf, eabi 모두 ABI의 타입을 정의하는 단어들이다. ABI란 무엇인가?ABI(Application Binary Interface) 너는 누구냐.우선 API란 무엇일까? 다음 출처에 따르면, API란 소스코드 레벨에서 두 소프트웨어가 소통하기 위한 규칙이다.그렇다면 ABI는 무엇일까? 다음 stackoverflow 답변 에 따르면 ABI는 기계어 수준의 API라고 한다.예를 들어, 내가 외부 라이브..
[ARM] Arm 아키텍처의 메모리모델 - 노멀 메모리, 디바이스 메모리
·
Embedded Systems/Arm 아키텍처
내가 사용하는 Cortex-M 보드의 Context Switching 방식이 궁금해졌고... 이를 파헤치다보니 Cortex-M3의 근간이 되는 Armv7 아키텍처의 메모리 모델을 알아야겠다는 생각이 들었다. 오늘은 이에 대해 공부해보고자 한다!이 글은 김동현(Austin Kim)님의 '시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리' 책을 참고하여 작성하였음을 밝힙니다!Arm의 메모리 모델??OS가 메모리를 관리하기 이전에, CPU가 메모리를 어떻게 분류하고 관리하는지 알아보자. 우선 생각해보기로는 32bit아키텍처인 만큼 메모리를 32bit(4GiB)로 분류해 주소를 부여하는 것 외에 다른 특별한 점이 있을까? 생각이 든다. 과연 그럴까?! Arm의 메모리 모델은 시스템의 메모리를 두가지 ..
[ARM] 익셉션? 너는 누구니?
·
Embedded Systems/Arm 아키텍처
FreeRTOS의 Context Switching 기작을 파고들다보니, SysTick과 PendSV 인터럽트를 만났다. 이 때 PendSV가 Context Switching을 위한 익셉션이라는 설명이 있는데... 익셉션 개념이 기억이 나질 않아 정리해본다.그래, 익셉션은 CPU 내부의 예외처리 알림이었지구글링을 통해 만난 https://wikidocs.net/253592 에 의하면, 익셉션과 인터럽트는 비슷한 개념이지만 이벤트 발생 주체와 상황이 미묘하게 다른 개념이라고 설명한다.해당 글의 정의에 의하면, 인터럽트는 외부 주변 장치나 외부 신호에 의해 발생하는 이벤트이고, 익셉션은 CPU 내부에서 발생하는 예외적인 상황에 대한 이벤트라고 한다. 예를 들어, 나눗셈 연산을 할 때, 0으로 나누면 CPU 내..
[Linux] 임베디드 리눅스 부팅 순서 + 비글본 블랙(BBB) 부팅 순서
·
Embedded Systems/리눅스
https://www.youtube.com/watch?v=DV5S_ZSdK0s&t=359s임베디드 리눅스 부팅 순서를 정리한 훌륭한 강의의 내용을 정리해보았다!1. "대부분의 리눅스 시스템"에서의 부팅 순서1. SoC ROM Bootloader의 역할보드에 파워를 넣으면, 제어가 reset vector라는 곳으로 넘어간다. 이 부분은 제조사가 보드에 사전 프로그래밍한 기능이다.reset vector 로 제어가 넘어간 뒤에는 일반적으로 SoC의 boot ROM 로더가 존재하기 때문에, ROM 부트로더가 executing 을 시작할 것이다.이제, ROM 부트로더의 할일은 기본적인 하드웨어를 설정하고 boot device에서 First stage bootloader을 찾는 것이다. 이 boot device는..
FLOPS? FLOPs?
·
AI/Deep Learning
딥러닝 모델의 성능을 들여다보던 중, FLOPS와 FLOPs가 다른 개념이라는 느낌을 받았다."엥..? S가 조금 더 작아진 놈이랑 뭐가 다르다는거니..." 헷갈리는 부분을 정리하고 가보자!! FLOPs(Floating Point Operations)는 부동소수점 연산을 의미한다.FLOPs의 연산은 사칙연산, root, log, exponential 등의 연산을 포함하며, 각 연산을 1회로 계산한다. FLOPS(Floating Point Operations Per Second)는 1초당 머신이 처리할 수 있는 부동소수점 연산의 수를 의미한다.한마디로 HW의 절대적인 절대적인 스펙을 말한다! reference! : https://kimbg.tistory.com/26
[C언어] C의 파일 입출력
·
소프트웨어/C
C를 이용한 문법 중, 항상 파일 입출력 부분의 개념이 헷갈렸다. 마침 보고있던 책인 서영진(2020),『사물인터넷을 위한 리눅스 프로그래밍 with 라즈베리파이, 제이펍, p188-p201. 에 내용 정리가 잘 되어있어, 해당 부분을 요약해 포스팅한다. 1. 표준 입출력 라이브러리유닉스가 개발되었던 초기에는 데이터를 저장하거나 출력하면 입출력 시간 때문에 프로그램이 멈춰있는 시간이 너무 길어졌다. 이러한 문제를 해결하기 위해 등장한 것이 바로 표준 입출력 라이브러리로, 컴퓨터 외부로 출력할 때 데이터를 바로 출력하지 않고 "버퍼(컴퓨터 메모리를 이용)"에 저장하는데, 버퍼가 가득 차거나 일정 시간이 지나면 출력한다.이런 표준 입출력 라이브러리에 여러 표준 함수들을 추가한 것이 C표준 라이브러리인데, ..
AI시대 SW 학습법
·
Insights
Jaeyun Henry Lee 님의 글을 퍼왔습니다. 저 또한 AI시대의 학습에 있어 공감가는 포인트가 많아 블로그에 글을 공유합니다.https://www.linkedin.com/feed/update/urn:li:activity:7401140553511419904/ 이재형님의 LinkedIn 활동 보기로그인 또는 회원 가입 후 더 확인해 보세요.www.linkedin.com고졸 출신이 OpenAI 연구원이 된 이야기 (정말 많이 공감되는 AI 시대 학습법)스웨덴 시골 마을 고등학교 중퇴자가 어떻게 최고의 기업인 OpenAI, 그것도 Sora 팀의 연구원이 됐는지 가브리엘 피터슨이 직접 그 비결을 풀었습니다. AI 시대에 어떻게 변화해서 학습하고, 앞으론 어떻게 커리어를 쌓아야 하는지에 대한 "진짜 공략집..
[C] 매크로 함수
·
소프트웨어/C
매번 헷갈리는 매크로 함수를 정리해보았다. 매크로#define 매크로명 치환될_부분#define은 매크로명을 정의하는 전처리 지시자로, 위와 같이 사용한다.매크로명을 정의하면 복잡한 상수나 문장을 의미 있는 단어로 쓸 수 있다.#define PI 3.14159예를 들어, 위와 같이 PI를 정의한다면, 3.14159 대신 PI를 사용하여 가독성을 높일 수 있다.이와 같은 매크로 유형은 "매크로 상수" 라고 한다. #define을 사용한 매크로 함수내가 리눅스 커널을 분석하며 헷갈렸던 부분이다. 매크로 함수가 어마어마하게 많이 나온다.매크로 함수는 인수에 따라 서로 다른 결괏값을 갖도록 치환된다. 따라서 비록 함수는 아니지만 인수를 주고 함수처럼 쓸 수 있다. #define 매크로_함수명(인수) 치환될_부분..
[Linux] 임베디드 리눅스 부팅 타임 최적화
·
Embedded Systems/리눅스
임베디드 리눅스 프로젝트를 수행하며 좋은 아티클이 있어 번역해보았다.https://medium.com/@therealcomtom/reducing-linux-booting-time-b5d0a061e05a임베디드 장치들은 어떻게 그렇게 빠르게 부팅되는지 궁금해본 적 있는가?그런 기기들은 자원이 매우 제한적임에도 불구하고, 데스크탑이나 노트북 컴퓨터와 비교했을 때 부팅 시간을 상당히 줄여낸다. 물론, 기본적으로 임베디드 장치들은 단 하나의 작업만 수행하도록 설계되어 있기 때문에, 운영체제가 불필요한 기능이 제거된 축소 버전이며, 거의 항상 리눅스 기반이다. 그리고 그 운영체제는 특정 하드웨어를 대상으로 빌드되기 때문에, 일반적인 리눅스 배포판처럼 다양한 기종을 지원할 필요도 없다. 그렇다면 이런 장치들에서 사..