-
메모리 맵 입출력(Memory mapped I/O) 입출력 맵 입출력(I/O mapped I/O)Computer Architecture 2020. 9. 25. 15:51
메모리 맵 입출력 CPU가 입출력 장치를 액세스할 때, 입출력과 메모리의 주소 공간을 분리하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식이다. 따라서 전체 메모리의 주소공간에 입출력 장치의 메모리나 레지스터를 메모리로 취급하여 전체 메모리의 일부분으로 특정영역에 할당하여 배치하는 방식이다. 입출력 장치의 메모리 주소가 나뉘어 있지 않기 때문에 액세스할 때는 메모리와 같은 주소공간이므로 같은 기계어 코드로 수행한다. 입출력 맵 입출력의 주소공간이 나뉘어 있어서 분리되어 있는 반면 메모리 맵 입출력은 메모리의 한 부분일 뿐이다. ARM과 같은 RISC의 경우 하드웨어와 기계어 명령어의 단순화 원칙에 따라 메모리 맵 입출력 방식을 사용한다. 입출력 맵 입출력 메모리와 입출력의 주소 공간을 분리하여 액세..
-
인터럽트 후반부 처리 / 워크큐Linux/Linux Kernel 2020. 9. 13. 13:29
워크큐 구성요소 워크 워크(워크 핸들러)는 실행단위다. 워커 스레드(워커 스레드 핸들러; woker_thread())가 워크를 실행한다. 워커 스레드 워커 스레드(워커 스레드 핸들러; woker_thread())가 워크(워크 핸들러)를 실행한다. 워커 풀 워크를 큐잉한 워크 리스트를 관리한다. 워커 스레드를 생성하면서 관리한다. 그래서 큐잉된 워크의 개수나 실행 중인 워커 스레드의 개수를 워커 풀로 부터 알 수 있다. 풀워크큐 풀워크큐는 워커 풀을 통해 워크와 워커 스레드를 관리한다. 워크큐 안에 *per_cpu 포인터 구조체 필드인 풀워크큐가 있고 풀워크큐안에 포인터 구조체 필드인 워커풀이 있고 워커풀안에 워크를 관리할 연결리스트 구조체 필드와 워커 스레드를 관리할 연결리스트 구조체 필드가 있다. ※ ..
-
grepLinux Command 2020. 9. 4. 13:50
대상 파일에서 문자열 검색 grep "hello" file.txt 현재 디렉토리의 모든 파일에서 문자열 검색 grep "hello" * 현재 디렉터리에서 특정 확장자로된 파일에서만 문자열 검색 grep "hello" *.c 현재 디렉터리에서 특정 확장자로된 파일에서만 대소문자 구분없이 문자열 검색 grep -i "hello" *.c 현재 디렉터리에서 하위 디렉터리를 포함한 모든 파일에서의 문자열 검색 grep -r "hello" * find . -name "*.cpp" | xargs grep -n IMG_
-
디바이스 드라이버 / 디바이스의 제어Linux/Linux Device Driver 2020. 9. 1. 22:55
하드웨어에 데이터를 써넣을 때는 write() 함수를, 반대로 하드웨어에서 발생한 데이터를 읽을 때는 read() 함수를 이용한다. 하지만 read와 write만으로 하드웨어를 제어할 수 없는 경우도 종종 발생한다. 그래서 리눅스 커널은 ioctl이라는 방식을 제공한다. ioctl() 함수는 디바이스 파일 이외에는 사용할 수 없는 디바이스 파일 전용 함수이므로 각 디바이스다마다 고유하게 선언하여 사용한다. 그래서 read()함수와 write() 함수 같이 정형화된 형태를 기본적으로 유지하지만 사용 방법은 다비아스마다 모두 다르다. 개념적인 xxx_ioctl 구성 static long xxx_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { ..