본문 바로가기

한국으로/임베디드 리눅스25

5.3 메모리 관리 5.3 메모리 관리5.3.1 커널의 메모리 관리 방법 유저 공간 안에 스택(32MB)은 실제 물리메모리의 적은 부분(8MB)만 연결돼있음.물리 메모리의 8MB 이상을 사용하면, page fault를 발생시켜 4KB씩 물리메모리 할당을 늘리는 구조임. 이처럼 리눅스는 물리 메모리를 '페이지' 단위로 나누어서 관리한다.한 페이지는 4KB.물리메모리의 페이지를 가리키는 페이지 프레임 배열(물리 메모리)의 주소를 담고있는 '페이지 테이블'은 MMU에서 관리한다. 페이지 테이블페이지 테이블은 가상 주소를 물리 주소로 변환해주는 테이블이다.CPU가 가상 메모리로 액세스하면 페이지 테이블에 지정된 물리 메모리 값이 액세스되는 것!페이지 테이블 역시 물리 메모리이다.만약, 물리 메모리가 배정되지 않은 가상 메모리를 액.. 2018. 6. 29.
5.2 시스템 콜 5.2 시스템 콜 소프트웨어 인터럽트응용 프로그램은 소프트웨어 인터럽트를 통해 '예외 상황'을 발생시킨다.예외 상황이 발생하면 CPU는 유저 모드에서 커널 모드로 변경되고,커널의 예외처리 코드에 의해 소프트웨어 인터럽트 핸들러가 호출된다.핸들러는 이후에 인터럽트 번호에 따른 개별 함수를 호출하고 실행한다. 2018. 6. 28.
5.1 프로세스 관리 5.1 프로세스 관리5.1.1 커널 프로세스 관리 프로세스프로그램은 코드와 실행에 필요한 자료의 묶음.프로그램이 실행될 때 비로소 프로세스로 거듭나게 된다.리눅스는 멀티태스킹 운영체제라서 동시에 여러개의 프로세스가 실행된다. 5.1.2 커널의 태스크 관리task_struct 객체커널이 태스크를 관리하기 위한 모든 정보를 포함한다.매뉴얼과 소스코드를 확인하자 linux/sched.h각 task_struct 객체들은 양방향 링크드 리스트로 저장되어있다. 태스크 상태TASK_RUNNING: 실행 중이거나 대기 중인 상태TASK_INTERRUPTIBLE: 특정 이벤트 또는 시그널을 기다리는 상태TASK_UNINTERRUPTIBLE: 특정 이벤트를 기다리는 상태 (시그널에 반응하지 않음)TASK_STOPPED: .. 2018. 6. 28.
4.2 스레드 동기화 4.2 스레드 동기화4.2.1 뮤텍스 함수int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutex_attr attr);기능: 뮤텍스 초기화 int pthread_mutex_lock(pthread_mutex_t* mutex);기능: 뮤텍스 획득 int pthread_mutex_unlock(pthread_mutex_t* mutex);기능: 뮤텍스 반납 int pthread_mutex_destroy(pthread_mutex_t* mutex);기능: 뮤텍스 비활성화 리턴: 성공 시 0, 에러 시 에러번호 리턴mutex: 뮤텍스 변수 주소attr: 뮤텍스 속성 (일반적으로 NULL) 4.2.2 POSIX 이름있는 세마포어세마포어 파일을 매개로 동기화 .. 2018. 6. 28.