기본 콘텐츠로 건너뛰기

리눅스 커널 모듈 관리: 로드, 언로드 및 예제

리눅스에서의 커널 모듈 관리하기 안녕하세요, mj입니다. 오늘은 리눅스에서 커널 모듈을 어떻게 관리하는지에 대해 알아보겠습니다. 커널 모듈은 리눅스 커널의 기능을 확장하는 중요한 요소입니다. 이 글에서는 커널 모듈을 로드하고, 언로드하며, 몇 가지 유용한 예제를 통해 사용 방법을 소개하겠습니다. 커널 모듈이란? 커널 모듈은 리눅스 커널의 기능을 동적으로 추가할 수 있는 코드 조각입니다. 이를 통해 시스템의 성능을 최적화하거나 새로운 하드웨어를 지원할 수 있습니다. 커널 모듈 로드하기 커널 모듈을 로드하는 명령어는 modprobe 와 insmod 입니다. 두 명령어의 차이점은 다음과 같습니다: modprobe : 의존성을 자동으로 처리하여 모듈을 로드합니다. insmod : 특정 모듈만 로드하며, 의존성을 수동으로 관리해야 합니다. 예제: 모듈 로드 다음은 dummy 라는 테스트용 모듈을 로드하는 예제입니다. sudo modprobe dummy 결과: dummy: loaded successfully. 커널 모듈 언로드하기 모듈을 언로드할 때는 rmmod 와 modprobe -r 를 사용합니다. modprobe -r 는 의존성을 고려하여 모듈을 언로드합니다. 예제: 모듈 언로드 다음은 dummy 모듈을 언로드하는 예제입니다. sudo rmmod dummy 결과: dummy: unloaded successfully. 커널 모듈 상태 확인하기 현재 로드된 모듈을 확인하려면 lsmod 명령어를 사용합니다. 예제: 로드된 모듈 확인 다음은 현재 로드된 모듈을 확인하는 예제입니다. lsmod | grep dummy 결과: dummy 16384 0 모듈 정보 확인하기 모듈에 대한 자세한 정보를 확인하려면 modinfo 명령어를 사용합니다. 예제: 모듈 정보 확인 다음은 dummy 모듈의 정보를 확인하는 예제입니다. modinfo dummy 결과: filename: ...

1. 리눅스의 buffer와 cache

안녕하세요, MJ 입니다.

리눅스 명령어 free 를 설명하다 보니 buffer 와 cache 에 대한 설명이 필요하게 되었는데, 내용이 짧지 않아 별도 포스트를 작성합니다.

우선 buffer 와 cache 는 I/O 성능 향상을 위한 메모리 영역입니다.

  1. buffer/cache 의 필요성 

    블록 디바이스(하드디스크 등 디스크에 해당하는 저장 장치)에 있는 데이터를 읽거나, 새로운 데이터를 저장하는데, 이런 저장 장치는 다른 장치들(메모리,CPU-cache)에 비해 속도가 느립니다. I/O 가 일어날 때 마다 디스크에 접근하여 파일을 읽고 쓴다면 너무 오래 걸려서 다른 프로세스의 처리에 지장이 생길 수 있습니다. 이러한 문제를 해결하기 위해 캐시가 필요하게 됩니다.

  2. 캐시란

    커널은 디스크를 빠르게 사용하고자 메모리의 일부를 디스크의 캐시로 사용합니다.

  3. 캐시의 동작

    한번 읽은 파일의 내용을 캐시 영역에 저장한 뒤, 다시 해당 파일을 읽으려 시도할 때, 메모리 영역에 아까 저장 해 둔 내용을 바로 처리할 수 있게 하는 것 인데, 바로 이 메모리를 buffer, cache 라고 합니다.

  4. buffer 와 cache의 차이

    buffer 와 cache 의 차이에 대해 설명 하기 위해 부가적인 설명을 추가합니다.

    [unix 파일시스템의 구조]

    → 유닉스의 파일시스템은 디렉토리와 파일을 찾기 쉽도록 유지 및 관리하는 시스템으로 4가지의 블록으로 구성되어있습니다.

    1. Boot block → 부팅에 필요한 정보를 담고 있습니다.
    2. Super block → 파일시스템의 어디부터가 i-node 블록인지, Data 블록인지 등의 정보를 담고 있습니다.
    3. i-node List → 파일 하나에 i-node 하나가 할당이 되는데 i-node 는 파일의 메타 데이터를 갖고 있습니다. 이 i-node 묶음으로 파일의 퍼미션, 소유자, 크기, inode 번호 등의 정보를 갖고있습니다.
    4. Data block 데이터가 저장되는 영역으로 각 데이터 블록은 한번에 하나의 파일만 할당이 될 수 있습니다.

    buffer 와 cache 의 차이를 설명하기에 앞서,
    buffer 는 buffer cache,
    cache 는 page cache
    용어를 정정하고 차이점을 설명 드립니다.

    buffer cache 는 Super Block 과 i-node list 에 해당하는 메타 데이터를 저장합니다. 디렉토리를 읽고자 하는 경우에는 디렉토리에 포함되어있는 파일들의 i-node block 들을 buffer cache 에 저장하고, 다음에 다시 그 파일에 접근하게 되면 buffer cache 에 존재하는 값을 가져다가 바로 보여주게 됩니다. 파일로의 접근을 빠르게 수행하기 위한 캐시라고 볼 수 있고,

    page cache 는 한번 읽었던 파일의 내용을 저장하여 동일한 파일로 I/O 요청이 일어나면, 디스크로부터 다시 파일의 내용을 읽어 올 필요가 없이, page cache 에 저장 된 내용을 보여줄 수 있어 I/O 성능이 향상 될 수 있습니다.

    → buffer (buffer cache)는 파일을 빠르게 접근 하기 위한 캐시, cache (page cache)는 파일의 내용을 빠르게 확인 하기 위한 캐시 가 되겠습니다.

    요청이 read 일때는 이렇습니다.


    write 요청이 일어나게되면, page cache 로 데이터를 작성하게 됩니다.

    아직 디스크에 저장하지 않은 이 데이터는 페이지 테이블이 수정 된 것이라는 의미로 dirty 플래그를 붙이게 되고, 이 플래그가 붙은 페이지를 dirty page 라고 부릅니다.
    dirty page 는 커널의 백그라운드로 처리되어 쓰기 작업에서도 메모리를 활용하여 성능이 향상됩니다.

     

    읽어주신 분들이 이해가 잘 되셨으면 좋겠습니다. 


        문의사항은 댓글을 달아 주시면 성심껏 답변 드리겠습니다.

            감사합니다.

댓글

가장 많이 본 글

5. 버추얼박스:설정 (+네트워크의 종류 설명)

안녕하세요 , MJ 입니다 .   우리가 실습을 하는데에 필요한 버추얼박스의 설정에 대해 설명을 합니다 .     버추얼 박스의 설정에는 종류별로 메뉴가 구분되어있습니다 . 1-1. 환경설정 1-2. 네트워크 설정 1-3. 미디어 설정       다른 설정도 존재하지만 , 필요한 일이 없을것이 예상되고 , 위 3 가지 설정에 대해서만 알고 계신다면 버추얼 박스로 실습을 하는데에 아무런 지장이 없고 또 취업을 하신 뒤에 실무에 가셔서도 문제가 될 것이 없습니다 .   환경설정 부터 확인하겠습니다 . 1-1. 환경설정 : 우리가 알아야 편한 내용은 2 가지가 있는데 VM 의 기본 저장경로 설정 " 파일 (F)" 의 환경설정 (P) … [ 단축키 : Ctrl+G] 을 누르면 환경설정 창이 보이고 , 제일먼저 확인되는 기본 머신 폴더 (M) 입니다 . VM 을 저장 할 경로를 지정하는 것인데 VM 은 가상 머신으로 디스크의 용량과는 상관없이 , 가상 컴퓨터의 정보가 저장되는 것으로 , 텍스트 파일형태로 저장되어있고 , 그 내용에는 CPU 를 몇개 사용하도록 되어있는지 , 메모리는 얼마만큼을 할당하도록 되어있는지 , 네트워크 인터페이스는 몇 개가 어떻게 설정되어있는지 ... 등 가상의 컴퓨터를 정의하는 내용의 파일이 저장되는 경로가 되고 ,   디스크 파일은 별도 미디어 설정에서 관리가 되지만 VM 을 생성하는 과정에서 만든 디스크는 VM 저장경로에 함께 생성 되어있어 사용자가 파일탐색기로 경로를 찾아가보면 파일의 사이즈로 아 이것이 디스크 파일인가보구나 하고 알 수 있습니다 .( 용량이 크고 ...

MJ. 로또의 회차별 당첨번호 API 확인 (예제포함)

안녕하세요, MJ 입니다.   로또 당첨번호를 확인하기위해 동행복권 사이트를 찾아 가거나, 포털사이트에서 검색을 할 수 있지만, 다음 주소를 브라우저에 붙여넣거나, curl 명령을 이용하여 터미널에서 손쉽게 확인할 수 있는 방법이 있어 소개를 드리려고 합니다.     < URL> https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo= < 회차번호 >     - API 주소 활용 방법 브라우저에 URL 입력하여 확인 .           >> 인터넷 주소창에 URL 을 입력       ( 윈도우 ) cmd / ( 리눅스 ) bash 터미널에서 curl 을 사용하여 확인 .( 예 : 123 회차 ) >> curl " https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo= 123 " <cmd>   <bash>         python/java/c 등 코드를 만들어서 확인 . >> 코드를 짜서 확인하는 것이 , 데이터를 가공하기도 좋고 , 앞으로 출현할 숫자를 분석하기도 좋지만 , 자신이 원하는 대로 데이터를 가공하기 위해 시간과 노력의 투자가 필요함 .       [ (API 결과 예시 ) 123 회차 조회결과 ] >> json 형식으로 공백 , 줄바꿈이 없이 순서도 제멋대로 확인되지만 (브라우저나 터미널에서 확인하면), 다음과 같은 데이터가 확인됨 .   <확인한 정보 줄맞춰봄> #######...