본문 바로가기

Operating System4

iSCSI Target 스레드 구조 Open Source iSCSI target의 비교 자료의 기술에 의하면, IET의 architecture는 이하와 같이 도시할 수 있습니다. IET는, kernel내에서 패킷 수신을 전문으로 수행하는 Receive thread와 송신을 수행하는 Send thread, File I/O를 수행하는 I/O thread의 3 종류의 thread로부터 구성되어 있습니다.iSCSI protocol로 요구된 READ/WRITE request를, Receive thread→Receive queue→I/O thread→Send queue→Send thread의 순서에 처리해, reply를 돌려준다고 하는 단순한 architecture입니다.이 구성의 이점은, iSCSI target의 실제 장점은 cache를 관리하지 .. 2018. 1. 12.
리눅스 커널의 네트워크 패킷 처리 방법 다른 장치도 마찬 가지지만, 네트워크 인터페이스가 패킷을 수신 하였을 때 커널에게 알려 주는 방법은 크게 폴링과 인터럽트 방식이 있습니다. 오늘은 두 가지 방식과 새로운 기술에 대해서 짚고 넘어가도록 하겠습니다. 1. Polling 방식 이 방식은 커널이 주기적으로 장치의 상태를 체크 하는 방식 입니다. 쉽게 말해, 장치의 레지스터를 읽어서 패킷의 수신 여부를 확인 하고, 장치가 새로운 패킷을 가지고 있을 경우 이를 처리 하는 방식 입니다. 패킷이 언제 올 줄 모르기 때문에 커널은 주기적으로(예를 들어, 0.0001초 마다) 장치가 패킷을 받았는지 검사 하는 것이지요. 이 방식은 패킷이 없을 경우에도, 커널이 계속 해서 패킷의 수신 여부를 검사 하기 때문에 CPU 자원의 낭비를 발생 시킨다고 할 수 있습.. 2018. 1. 12.
container_of 매크로 이해하기 kobject는 그 자체만으로는 쓰임새가 없고 주로 다른 객체 안에 포함되서 사용된다. 대부분의 sysfs 관련 함수나 디바이스 드라이버 등에서 kobject의 포인터를 인자로 전달받아서 사용한다. 그래야 드라이버 작성자가 어떤 데이터 구조를 만들어서 사용해도 인터페이스는 통일될 수 있다. 그래서 kobject의 포인터에서 kobject가 속한 객체의 포인터를 계산하는 일이 많아지고 이를 위한 container_of 매크로가 만들어졌다. 예를 들어 커널 2.6.23에서 include/linux/cdev.h에는 다음과 같이 문자 장치를 표현하는 cdev 구조체가 선언되어 있다. 13 struct cdev { 14 struct kobject kobj; 15 struct module *owner; 16 con.. 2018. 1. 12.
리눅스 커널 프로세스 페이지 테이블(Process Page Table)과 커널 페이지 테이블(Kernel page table) 프로세스 페이지 테이블 - 프로세스의 선형 주소 공간은 두 부분으로 나누어진다. 1. 0x00000000 ~ 0xbfffffff(3GB 영역)의 선형 주소는 프로세스가 사용자 모드와 커널 모드 양쪽 어디에 있더라도 항상 접근 할 수 있다. 2. 0xc0000000 ~ 0xffffffff(1GB 영역)의 선형 주소는 프로세스가 커널 모드에 있을 때만 접근 가능하다. - 프로세스가 사용자 모드에서 동작 중일 때는 0xC0000000보다 작은 선형 주소를 만들어 사용하고, 커널 모드에서 동작 중일 때는 커널 코드를 수행하면서 0xC0000000 이상의 선형 주소를 사용한다. - 0xC0000000 이하의 선형 주소를 매핑하는 페이지 전역 디렉토리(PGD)의 해당 엔트리들의 내용은 프로세스마다 다르다. 반면, .. 2018. 1. 12.