부트로더(bootloader)란 무엇인가?
·
Embedded Systems/리눅스
부트로더는 OS가 시동되기 이전에 미리 실행되면서 kernel이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리 하고 최종적으로 OS를 시동시키기 위한 목적을 가진 프로그램을 말한다.즉, 메모리 / 하드웨어(네트워크, 프로세스 속도, 인터럽트), 코드&데이터&스택 영역 설정 및 초기화 / 커널 로더 로딩 / 커널 이미지 로딩 / 커널 로더를 실행해 커널 이미지를 메모리에 올리기를 수행한다.다시 말해, 임베디드 리눅스 시스템에서 부트로더는 시스템을 기본 수준(basic level)으로 초기화하고 커널을 로드하는 두 가지 주요 작업을 수행한다고 할 수 있다. 전원을 켜거나 리셋한 뒤 부트로더 코드의 첫 줄이 실행될 때, 시스템은 초기 상태에 있다. DRAM 제어기는 시작하지 않았기에 메모리에는 접근할..
운영체제 기술면접 질문 모음
·
소프트웨어/운영체제
race condition 이란?더보기race condition은 경쟁조건이라고도 하며, 여러 프로세스나 스레드가 동시에 데이터에 접근할 때 접근 순서에 따라서 연산의 결과가 달라질 수 있는 상황을 의미합니다.syncronization 이란?더보기syncronization이란, race condition을 예방하기 위한 조치입니다.프로세스나 스레드가 critical section에 접근할 때, mutex나 semaphore을 이용한 lock을 걸어 다른 프로세스/스레드의 접근을 막는 방식이 있습니다.그럼 critical section 이 뭔지 답해보시겠어요?더보기critical section은, 공유자원의 syncronization을 위해 하나의 스레드/프로세스 만 접근 가능한 영역을 의미합니다.
[C언어] const 키워드
·
소프트웨어/C
const 키워드를 사용하면 변수를 상수로 사용할 수 있다. 다시말해, const 변수에 할당된 값을 변경할 수 없게된다. const 상수화를 사용하는 이유는, 레지스터 주소와 같이 고정되어 있어야 할 값을 변경하는 실수를 미연에 방지하기 위해서이다. 사용 예시!const int a = 1;a = 0; //
[C] void* 포인터
·
소프트웨어/C
전문가를 위한 C 책을 보다가, 다음과 같은 함수를 만났다. void* thread_body(void* arg){ printf("Hello from first thread!"); return NULL;}음... 이전에 void형 포인터를 공부한 적이 있었는데 까먹었다.. 이참에 확실히 정리해두고자 한다. int a = 10;int* b = &a;이 코드를 말로 풀어 설명하면 "b는 a의 주소를 저장하는데, 그 주소에는 int형 데이터가 있다." 이다. 맞는 말이다.int a=10;void* b=&a;이번엔 이 코드를 풀어 설명하면 "b는 a의 주소를 저장하는데, 그 주소에는 void형 데이터가 있다." 이다.그런데... void는 값이 없음을 의미하는 심볼이 아니던가? 컴퓨터는 자료형을 모르기 때..
[C] 분할 컴파일
·
카테고리 없음
하나의 프로그램을 여러 사람이 나누어 개발할 수 있다면 프로그램의 크기가 커도 충분히 개발 기간을 줄일 수 있다. 단 2가지 문제를 해결해야 한다.하나는 개별적으로 코드를 작성하고 컴파일 및 에러 수정을 할 수 있어야 한다. 두 번째는 각 개발자들 간의 데이터 공유와 코드 재활용이 가능해야 한다. C언어는 분할 컴파일을 통해 여러 개의 소스 코드를 각각 독립적으로 작성하고 컴파일 할 수 있으며 컴파일된 개체 파일을 링크해 하나의 큰 프로그램으로 만들 수 있다.또한 extern 선언을 통해 파일들 간 데이터를 공유하고 전처리 지시자로 코드를 쉽게 재활용할 수 있다. 분할 컴파일을 위해 파일을 나눌 땐 주의할 것이 있다. 각 파일을 독립적으로 컴파일 할 수 있도록 필요한 선언을 포함해야 한다는 것이다. 즉..