2010-05-18 4 views
4

/proc 파일 시스템을 사용하여 "멀티 캐스터"를 시뮬레이트하는 커널 모듈을 작성해야합니다.IO 시스템에 정보 저장

기본적으로 다음과 같은 시나리오를 지원해야합니다

1)/proc 파일에 하나의 쓰기 액세스를 허용 많은 읽기/proc 파일에 액세스합니다.

2) 모듈에는 마지막으로 성공적으로 기록한 내용의 버퍼가 있어야합니다. 각 쓰기는 모든 판독기에서 읽어야합니다.

시나리오 2, 작성자가 무언가를 써서 두 명의 독자 (A와 B)가 있고 버퍼의 내용을 읽은 다음 A가 다시 읽으려고하면이 경우 wait_queue로 들어가서 대기해야합니다 다음 메시지의 경우 이 아니라이 같은 버퍼를 다시 가져야합니다.

이미 현재 버퍼를 읽는 모든 pid의 맵을 유지해야하며, 다시 읽으 려하고 버퍼가 변경되지 않은 경우 새로운 버퍼가있을 때까지 차단해야합니다. 나는지도없이 그 정보를 저장할 수있는 방법이 있다고 생각하고있다. 이미 I/O 시스템 내부에 중복 된 필드가 있다는 소식을 들었습니다.이 필드는 이미 현재 버퍼를 읽었을 때 프로세스에 플래그를 지정할 수 있습니다.

누군가 내가 그 분야를 찾아야하는 팁을 줄 수 있습니까? pid와 버퍼의 "맵"을 유지하지 않고 현재 프로세스의 정보를 어떻게 저장할 수 있습니까?

감사합니다.

답변

1

PID를 기반으로하지 마십시오. 단순히 잘못된 수준의 추상화입니다.

파일을 열 때마다 열려있는 파일의 인스턴스를 참조하는 새 이 만들어집니다. struct file 내에 정보 (주어진 struct file으로 읽은 가장 최근 버퍼)를 저장하십시오.

struct fileprivate_data 포인터를 사용하여 필요한 정보를 저장할 수 있습니다. 그것이 바로 그 때문입니다.