- 论坛徽章:
- 0
|
以我的理解,大致是写一个共享队列读写的module,加两个字符设备,然后用一个多线程的测试应用去测试。如果有理解不对的地方请指正。主要不太明白的地方有timestamp和这个token,token id如何实现。希望前辈给讲解一下。谢谢
(希望似懂非懂的童鞋不要用很确定的语气讲,容易误导其他人,谢谢)
Assignment Objectives
1. To learn the basic programming technique for module and device driver in Linux kernel.
2. To learn thread programming in Linux.
3. To access RTC module in x86 architecture.
Project Assignment
In this assignment, your team is required to develop
1. A device driver for shared queues which perform the basis enqueue and dequeue operations and record the time of the operations.
2. A test program that initiates multiple threads to access the shared queues.
When the device driver is installed, two queue devices, named “Tqueue1” and “Tqueue2”, will be created and added to Linux device file systems. The two devices act as FIFO (first-in-first-out) queues where tokens can be enqueued and dequeued. Each token is represented by token id which is an integer. Each queue can be shared by multiple tasks (processes or threads) concurrently and should be implemented as a ring buffer of size 5. The device driver should implement the following file operations:
• open: to open a device (either Tqueue1 or Tqueue2)
• write: to enqueue a token to the device. The time of enqueue should be attached to the token and saved in the queue device. If the queue is full, -1 will be returned.
• read: to dequeue a token from the device. The data returned includes token id, arrival timestamp, and departure timestamp. If the queue is empty, -1 will be returned.
• release: to release the file structure.
Timestamp is a struct of 3 bytes for hour, minute, and second. It can be read from the real-time clock module of Intel I/O controller hub ICH8.
In the test program, you will create 6 threads:
• Two sender threads, sender1 and sender2, which create one token at a time and enqueue it to Tqueue1. They then take a nap (sleep) for a random interval before sending the next token. If an enqueue operation fails, the sender retries it after a nap. When a taken is created, it is assigned with a global sequence number as the token id.
• Two router threads, router1 and router 2, which repeat the operations of dequeuing a taken from Tqueue1, printing out the token id and the timestamps, sending the taken to Tqueue 2, and taking a nap. If either dequeue or enqueue operations fail, the router retries the operation after a nap.
• Two receiver thread, receiver1 and receiver2, which repeat the operations of dequeuing a taken from Tqueue2, printing out the token id and the timestamps, and taking a nap. If a dequeue operation fails, the receiver retries the operation after a nap.
All threads exit after completing the operations for 100 tokens. The time for a nap is an interval distributed randomly between 100ms and 500ms. |
|