컴퓨터 시스템은 크게 H/W와 S/W로 구분된다. S/W는 운영체제와 그 위에서 동작하는 응용 프로그램(애플리케이션)으로 다시 구분되며, 운영체제는 커널(kernel)과 시스템 프로그램을 세분할 수 있다. 커널이란 "항상 메모리에 상주"하면서 동작하는 운영체제의 핵심
리눅스 소스 /usr/src/linux 또는 /usr/src/linux 디렉터리에 리눅스(커널) 소스가 존재한다. source: https://www.programmersought.com/article/9662770750/ kernel 디렉터리: 태스크 관리자가 구
리눅스를 새로 깔거나 버전이 업그레이드된다면 새로운 커널을 컴파일 하고, 컴파일 된 커널로 재부팅하면 된다. 일반적인 소스 코드를 컴파일하여 실행 파일로 만드는 것과 동일하다. 단지 차이점이 있다면 커널이라는 실행 파일(bzImage 또는 zImage)은 실행 시(부팅
태스크: 자원소유권의 단위쓰레드: 수행의 단위프로세스: 동작중인 프로그램프로그램: 디스크에 저장되어 있는 실행 가능한 형태의 파일(바이너리 기계 명령어 + 수행에 필요한 자료들의 집합(data))실행 파일(실행 가능 오브젝트 파일)은 그저 디스크에 저장되어 있는 수동적
이전 글(Linux - (4))는 사용자 입장에서 프로세스와 쓰레드를 어떻게 생성하는지 살펴본 글이다. 커널에서는 이러한 객체들을 어떻게 구현하는 살펴본다.프로세스는 자신이 사용하는 '자원'과 그 자원에서 수행되는 '수행 흐름'으로 구성된다. 그리고 리눅스에서는 이를
태스크는 생성된 뒤 자신에게 주어진 일을 수행하며, 이를 위해 디스크 I/O나 Lock 등 CPU 이외의 자원을 요청하기도 함. 당장 태스크에 제공할 수 없다면 커널은 해당 태스크를 잠시 '대기'상태로 두고, 요청한 자원이 사용 가능해지면 다시 '수행'상태로 전이시켜준
스케줄링: 여러 개의 태스크들 중 다음에 수행시킬 태스크를 선택하여 CPU라는 자원을 할당하는 과정을 스케줄링이라 한다. 리눅스의 태스크는 실시간 태스크와 일반 태스크로 나뉘며 각각을 위해 별도의 스케줄링 알고리즘이 구현되어 있다. 리눅스는 140단계의 우선순위를 제공
스케줄링 동작원리검퓨터 시스템의 가장 중요한 자원 중 하나인 CPU를 어떤 태스크가 사용하도록 할 것인가는 중요하다. 공정해야 여러 태스크들이 공평하게 자신의 작업을 수행할 수 있으며, 효율적이어야 가장 높은 처리율(throughput)을 낼 수 있을 것이다. 또한 가
주어진 시간(기간)에 시스템에 의해 실행되어야 할 작업량 Turnaround time(반환 시간): 완료 시간 - 도착 시간배치 시스템(batching system)에서는 이 반환 시간이 스케줄링 정책에 좋은 메트릭이 된다. Response time(응답 시간): 처음
리눅스는 일반 태스크를 위해 사용하고 있는 스케줄링 기법은 CFS(Completely Fair Schedular)이다. 완벽하게 공평한 스케줄링이란 보통 CPU 사용시간의 공평한 분배를 의미한다. 만약 A, B 두개의 태스크가 수행 중이라면, A와 B의 CPU 사용시간
모놀리식 커널은 리눅스로 OS를 배운 학부생에게 가장 익숙한 OS이다. Application을 제외한 모든 system 관련 기능들(VFS, IPC, Filesystem 등등)을 커널이 관리하며 각 영역들은 단계적으로 나뉘어 있다. 생각해보면 리눅스 프로세스 하나를 만
속도와 효율성을 위해 I/O 시스템 콜(커널)과 표준 C 라이브러리 I/O 함수(stdio 함수)는 디스크의 파일에 작용할 때 데이터를 버퍼링(buffering)함. 버퍼링의 종류는 커널 버퍼링(버퍼 캐시)와 stdio 라이브러리 내의 버퍼링이 있다. 디스크 파일을 가
인터럽트란 주변 장치와 커널이 통신하는 방식 중의 하나로, 주변장치나 CPU가 자신에게 발생한 사건을 리눅스 커널에게 알리는 메커니즘이다. ex) 외부에서 네트워크를 통해 도착했음을 알리기 위해, 혹은 키보가 눌렸음을 알리기 위해.인터럽트가 발생되면 운영체제는 왜 인터
응용 프로그램 수준 태스크가 수행되다가 'page fault error'가 발생하면 리눅스 커널은 폴트가 발생한 주소에 해당되는 데이터를 메모리에 적재하고 현재 태스크의 페이지 테이블을 수정해 준 뒤, 폴트를 발생시킨 명령어를 다시 수행시켜준다.devide by zer
사용자 수준 응용 프로그램에게 커널이 자신의 서비스를 제공하는 인터페이스이다. 따라서 사용자가 운영체제의 기능이나 모듈을 활용하기 위해서는 반드시 시스템 콜을 사용해야 한다. 따라서 시스템 콜은 커널로의 진입점(entry point)라고 볼 수 있다.대표적인 예로는 새
리눅스에서는 동적 커널 모듈(dynamic kernel module) 또는 간단히 모듈이라고 불리는 매커니즘을 제공한다. 커널 대부분의 기능은 모듈로 구현될 수 있다. 예를 들어 파일시스템, 디바이스 드라이버, 통신 프로토콜 패밀리, 새로운 시스템 호출 등이 모듈로 구
reference:"리눅스 커널 내부구조" / 백승재, 최종무"Operating Systems: Three Easy Pieces" / Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau
먼저 리눅스 헤더를 설치한다. 모듈 작성, printk test module (hello.c)<linux/init.h>: init, exit 매크로를 include<linux/module.h>: KERN_INFO와 같은 로그 메시지 등급 지정 매크로 inc
참조: 문자 디바이스 드라이버 추가 및 삭제 / https://temp123.tistory.com/16?category=877924기본적으로 디바이스는 하드웨어를 의미하고, 드라이버는 그 디바이스를 제어하는 SW를 의미함. 예를 들어 UART 칩이 16개 달려