20201321周慧琳

教材第五六章读书笔记

教材第五六章读书笔记

by 20201321 周慧琳

学习目标

  • 第五章:定时器及时钟服务
    第五章主要是关于定时器及其服务,指明了CPU操作和中断处理对于理解定时器服务比较关键,介绍了一些Linux中与定时器相关的系统调用命令,并介绍了进程间隔定时器、定时器生成的信号,并通过示例演示了进程间隔定时器。

  • 第六章:信号和信号处理
    第二章讲述了信号和信号处理;介绍了信号和中断的统一处理,有助于从正确的角度看待信号;将信号视为进程中断,将进程从正常执行转移到信号处理;解释了信号的来源,包括来自硬件、异常和其他进程的信号;然后举例说明了信号在Unix/Linux中的常见用法;详细解释了Unix/Linux中的信号处理,包括信号类型、信号向量位、信号掩码位、进程POC结构体中的信号处理程序以及信号处理步骤;用示例展示了如何安装信号捕捉器来处
    理程序异常,如用户模式下的段错误;还讨论了将信号用作进程间通信(PC)机制的适用性。

知识图谱的归纳

对于第五六章繁琐的知识点,利用xmind工具制作了一个知识图谱来强化知识理解

学习收获和心得

开始学这本书我感受最大的是这本书给了我们一个完整的学习架构和学习建议,但是要真正掌握其中的一个知识点还是需要实践。
无论是GNU make工具以及对应的makefile编写、vim编译器的实际使用等等,这些只看书是非常抽象的。有些时候,博客或者视频确实会比书更通俗易懂些。尽管我必须承认这本书提供的知识的严谨性是博客和视频无法比拟的。

以下是我重点学习的内容:

  • Linux文件系统

  • vim使用

【最强Vim新手指南,手把手教你打造只属于自己的代码编辑器!-哔哩哔哩】 https://b23.tv/L73Zptt

这本书对于vim的介绍比较少,主要是关于emac的,所以我在网上找到了这个视频。

他首先介绍了vim的定位、设计理念,然后介绍了他自己的vim快捷键配置,现在很多ide都有vim模式插件

在简洁的vim模式下编辑速度大幅提升,vim在现在更多地已经不作为一种具体工具,而是一种习惯模式,实现不用鼠标只用键盘编辑代码。

  • make工具与Makefile的编写
    参考https://blog.csdn.net/weixin_38391755/article/details/80380786进行学习

    Windows的IDE都为我们做了这一块的工作,所以很多时候我们都没有重视这块知识。但在Unix下的软件编译,你就不能不自己写makefile了。之前我在ide里面也会发现Makefile文件,但是我并不知道这是干什么的。

    我看了这本书里面的描述,又去查找了一下相关的博客,现在make和makefile让我想到了我在“计算机组成原理”里老师让我们用Verilog语言编写一个cpu中的寄存器文件,这个项目包括8位寄存器文件、译码器文件和选择器文件,这三个文件需要按一定的顺序编译和传递参数。我们需要写一个编译文件实例化、指明编译顺序和联系各个文件的参数。

    而Makefile里面的依赖关系,编译规则,跟这些是底层逻辑差不多的。

    makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
    makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
    一下是一个自己写的Makefile文件

 CC = gcc
 CFLAGS = -O -Wall -m64 -std=gnu89
 LIBS = -lm
  
 all: main_max main_min   #必须写成all这样的形式,否则只会生成前一个可执行文件main_max
  
 main_max: main_max.c bar.o foo.o
     $(CC) main_max.c bar.o foo.o -o main_max

main_min: main_min.c bar.o foo.o
    $(CC) main_min.c bar.o foo.o -o main_min 

foo.o: foo.c
    $(CC) -c foo.c
 
bar.o: bar.c
    $(CC) -c bar.c

.PHONY: clean
clean:
    rm *.o main_max main_min
  • 数据结构与Linux文件树模拟
    大二上数据结构课我们已经学过链表、队列、二叉树这些数据结构,它们的描述和定义以及常见的删除节点、遍历方法我们都编写过C语言代码,在这本书里面给出了这部分代码,不过我个人觉得要深入理解的话只看这本书肯定不够。不过还好我们学过所以这里再回顾一遍理解起来并不很难。

    而要去做一个Linux文件树模拟相当于写一个基于二叉树数据结构的编程项目,里面的一些操作如mkdir、rmdir、creat、rm、cd、pwd、ls其实就是一些功能,我们可以编写对应的函数去实现它。

参考了一些博客改了改,虽然很多功能很简陋,最后还是有结果

posted on 2022-09-14 22:12  20201321周慧琳  阅读(18)  评论(0编辑  收藏  举报