리눅스 커널의 이해
커널
컴퓨터 운영 체제의 핵심이 되는 컴퓨터 프로그램으로, 시스템의 모든 것을 완전히 통제
운영 체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러가지 서비스를 제공 한다.
커널은 어플리케이션 소프트 웨어와 하드웨어를 연결 한다.
애플리케이션을 라이브러리로 만들고, C 라이브러리는 시스템 콜을 통해 커널 스페이스로 진입해 코어 커널로 진입하고, 하드웨어 자원이 필요 할때는 디바이스 드라이버를 통해 접근한다.
cat 명령어는 출력 커맨드이며 strace는 앞에 명령어의 시스템 콜을 보여준다.
리눅스 커널의 주요 기능
하드웨어 관리 및 추상화
디바이스 드라이버만이 하드웨어가 제공하는 기능이나 프로토콜에 관여
사용자 프로그램은 하드웨어에 종속적인 작업이 필요하지 않음
파일 입출력시 Block I/O 레이어를 통해서 여러 가지 저장 매체를 읽어들여 유저가 사용할 때는 똑같이 사용이 가능하다.
유저의 입장에서는 어떤 저장된 파일을 읽을 때 연속된 데이터를 읽는다고 로지컬하게 받아들이나 실제 디스크에는 파편화 되어 저장되어 있다. 하드웨어 관리 및 추상화로 인해 그것과 관계없이 연속된 공간처럼 입출력이 진행된다.
프로세스 와 쓰레드 관리
CPU 타임 공유와 메모리 보호
프로세스 스케쥴러로 인해 여러 개의 쓰레드들이 시간을 나눠가면서 CPU자원을 쓰기 때문에 CPU의 숫자보다 많은 일을 할 수 있게 된다.
악의적인 메모리 주소 공격에 방지하기 위해 매번 프로그램이 실행될 때마다 다른 메모리 주소에 쓰인다.(주소 공간 배치 랜덤화 ASLR)
메모리 관리
개별 프로세스에 가상의 연속된 메모리 공간을 제공한다. 32bit = 4GB, 64bit = 16엑시바이트
실제는 물리 매모리 내에서 같이 섞여서 할당되고 해제된다.