diff --git a/README.md b/README.md
index c96d9dd6b3d0b178f4cd5513c822e83db17fcb76..070fb42cf1610eff7e51616a60f1896aec7df59c 100644
--- a/README.md
+++ b/README.md
@@ -153,9 +153,13 @@ patch -p1 < patch-xxx-rt-xx
 
 ## 3.4 内核函数选点
 
-- [Doc:观测点选择](https://gitlab.eduxiji.net/T202411664993243/project2210132-239754/-/blob/main/doc/%E8%A7%82%E6%B5%8B%E7%82%B9%E9%80%89%E6%8B%A9.md)
+> 全文见本仓库:[Doc:结构体及函数评估](https://gitlab.eduxiji.net/T202411664993243/project2210132-239754/-/blob/main/doc/%E7%BB%93%E6%9E%84%E4%BD%93%E5%8F%8A%E5%87%BD%E6%95%B0%E8%AF%84%E4%BC%B0.md)
 
-- [Doc:结构体及函数评估](https://gitlab.eduxiji.net/T202411664993243/project2210132-239754/-/blob/main/doc/%E7%BB%93%E6%9E%84%E4%BD%93%E5%8F%8A%E5%87%BD%E6%95%B0%E8%AF%84%E4%BC%B0.md)
+- `tracepoint:sched/sched_switch`
+- `kprobe:__handle_irq_event_percpu`
+- `kprobe:enqueue_task_fair/dequeue_task_fair`
+- `kprobe:update_rq_clock`
+- `kprobe:irq_forced_thread_fn`
 
 ## 3.5 机器学习实践
 
@@ -168,4 +172,15 @@ patch -p1 < patch-xxx-rt-xx
 
 # 4.开发报告
 
+## 4.1 初赛已完成功能/任务
+
+- [x] RT-Patch Kernel 理论研究、论文研究
+- [x] RT-Patch Kernel 开发机内核编译、环境部署
+- [x] 确认瓶颈观测分析技术栈
+- [x] RT-Patch 瓶颈分析的内核函数选点
+- [x] 编写RT-Patch 中断上半部分、中断下半部分时间及进程分布观测程序
+- [x] 编写每秒平均调度抢占观测程序。
+- [x] 编写CPU进程队列长度观测程序。
+- [x] 编写CPU进程调度延迟观测程序。
+
 # 5.部署测试
diff --git "a/doc/\347\273\223\346\236\204\344\275\223\345\217\212\345\207\275\346\225\260\350\257\204\344\274\260.md" "b/doc/\347\273\223\346\236\204\344\275\223\345\217\212\345\207\275\346\225\260\350\257\204\344\274\260.md"
index f8244063cb68f5d3d4b1dd566fb73b3858df42ab..cf6006b8da58b8da566a13e00d9b005b9f4dee1e 100644
--- "a/doc/\347\273\223\346\236\204\344\275\223\345\217\212\345\207\275\346\225\260\350\257\204\344\274\260.md"
+++ "b/doc/\347\273\223\346\236\204\344\275\223\345\217\212\345\207\275\346\225\260\350\257\204\344\274\260.md"
@@ -1,21 +1,51 @@
-# struct irqaction
-- `irq_handler_t handler`: 中断处理程序的函数指针。这是当中断发生时,内核首先调用的函数。
-- `void *dev_id`: 设备ID或设备特定信息的指针。它可以用于区分共享同一中断号的不同设备。
-- `void *percpu_dev_id`: 每个CPU的设备ID。对于某些类型的中断,这个字段可以帮助处理每个CPU特定的数据。
+# 1.观测点选择
 
-- `struct irqaction *next`: 指向下一个irqaction结构体的指针。如果多个中断处理程序注册到了同一个IRQ,这些结构体就会形成一个链表。
-- `irq_handler_t thread_fn`: 指向中断线程函数的指针。如果中断处理程序被线程化(即它运行在一个独立的内核线程中,而不是在硬件中断上下文中),这个函数会被调用。
-- `struct task_struct *thread`: 指向中断线程的task_struct结构体的指针。如果中断被线程化,这个字段代表中断处理的内核线程。
-- `struct irqaction *secondary`: 指向次级中断处理程序的指针。这用于那些需要两个阶段处理的中断。
-- `unsigned int irq`: 与此中断处理程序相关联的IRQ号。
-- `unsigned int flags`: 中断标志,定义了中断处理程序的各种属性,如中断类型等。
-- `long unsigned int thread_flags`: 中断线程的标志。这些标志用于管理中断线程的行为。
-- `long unsigned int thread_mask`: 中断线程掩码,决定了哪些CPU可以运行这个中断线程。
-- `const char *name`: 指向中断名称的指针,通常是与该中断关联的设备名称。
-- `struct proc_dir_entry *dir`: 指向proc文件系统中表示此中断信息的目录的指针。这用于在/proc/irq/下创建有关这个中断的信息文件。
+>以下观测点选择的实现方式仅作为临时开发查看,非最终实现方式。
 
+## 1.1 中断线程的处理函数追踪 `irq_forced_thread_fn`
 
-# struct irq_desc
+irq_forced_thread_fn函数是处理线程化中断的函数。线程化中断允许内核将中断处理下半部延迟执行,转而作为内核线程的形式运行,减少了中断处理在系统上的即时负载。监控此函数有助于分析下半部中断处理对实时性能的影响。
+
+```shell
+sudo bpftrace -e 'kprobe:irq_forced_thread_fn { @[comm] = count(); }'
+```
+
+## 1.2 `__handle_irq_event_percpu`
+该函数是上半部中断处理的关键入口点,负责处理每个 CPU 的硬件中断。对其进行跟踪可以帮助我们理解硬件中断在整个系统的分布和频率,从而分析硬件中断可能在系统响应时间中引入的延迟。
+
+## 1.3 `sched:sched_switch`
+此跟踪点涉及到调度器的上下文切换。通过测量状态为TASK_RUNNING(prev_state == 0)的进程被抢占的次数,我们能够定量分析系统的抢占行为和频度,评估抢占对实时任务性能的影响。
+
+## 1.4 `enqueue_task_fair/dequeue_task_fair`
+函数dequeue_task_fair是从运行队列中移除任务的函数。监控此函数可以获得进程被调度的延迟。
+
+## 1.5. `update_rq_clock`
+update_rq_clock函数是更新调度器时钟的重要函数,每次对运行队列进行操作之前都会被调用。通过该函数进行CPU运行队列长度的hook
+
+# 2. 相关结构体分析
+
+## 2.1 struct irqaction
+
+```c
+struct irqaction{
+    irq_handler_t handler; //中断处理程序的函数指针。这是当中断发生时,内核首先调用的函数。
+    void *dev_id; //设备ID或设备特定信息的指针。它可以用于区分共享同一中断号的不同设备。
+    void *percpu_dev_id; //每个CPU的设备ID。对于某些类型的中断,这个字段可以帮助处理每个CPU特定的数据。
+
+    struct irqaction *next; //指向下一个irqaction结构体的指针。如果多个中断处理程序注册到了同一个IRQ,这些结构体就会形成一个链表。
+    irq_handler_t thread_fn; //指向中断线程函数的指针。如果中断处理程序被线程化(即它运行在一个独立的内核线程中,而不是在硬件中断上下文中),这个函数会被调用。
+    struct task_struct *thread; //指向中断线程的task_struct结构体的指针。如果中断被线程化,这个字段代表中断处理的内核线程。
+    struct irqaction *secondary; // 指向次级中断处理程序的指针。这用于那些需要两个阶段处理的中断。
+    unsigned int irq; //与此中断处理程序相关联的IRQ号。
+    unsigned int flags; //中断标志,定义了中断处理程序的各种属性,如中断类型等。
+    long unsigned int thread_flags;//中断线程的标志。这些标志用于管理中断线程的行为。
+    long unsigned int thread_mask;  //中断线程掩码,决定了哪些CPU可以运行这个中断线程。
+    const char *name`: 指向中断名称的指针,通常是与该中断关联的设备名称。
+    struct proc_dir_entry *dir; // 指向proc文件系统中表示此中断信息的目录的指针。这用于在/proc/irq/下创建有关这个中断的信息文件。
+}
+```
+
+## 2.2 struct irq_desc
 ```c
 struct irq_desc {
     struct irq_common_data	irq_common_data;	// 包含IRQ的通用信息
diff --git "a/doc/\350\247\202\346\265\213\347\202\271\351\200\211\346\213\251.md" "b/doc/\350\247\202\346\265\213\347\202\271\351\200\211\346\213\251.md"
deleted file mode 100644
index b9fe3c4f6e41178443e3b8fac0c1b50d96ab64a4..0000000000000000000000000000000000000000
--- "a/doc/\350\247\202\346\265\213\347\202\271\351\200\211\346\213\251.md"
+++ /dev/null
@@ -1,9 +0,0 @@
-# 观测点选择
-
->以下观测点选择的实现方式仅作为临时开发查看,非最终实现方式。
-
-• 中断线程的处理函数追踪 `irq_forced_thread_fn`
-```shell
-sudo bpftrace -e 'kprobe:irq_forced_thread_fn { @[comm] = count(); }'
-```
-