zoukankan      html  css  js  c++  java
  • linux内核分析第3章&第18章读书笔记

    linux内核分析第3章&第18章读书笔记

    第三章 进程管理

    进程:处于执行期的程序(目标码存放在某种存储介质上)

    包含资源:可执行程序代码,打开的文件,挂起的信号,内核内部数据,处理器状态,具有内存映射的内存地址空间,执行线程,存放全局变量的数据段

    执行线程:进程中活动的对象

    拥有资源:独立的程序计数器,进程栈,进程寄存器。

    内核调度的对象是线程

    进程的两种虚拟机制:虚拟处理器,虚拟内存

    任务队列:链表每一项都是进程描述符结构。

    进程描述符描述内容:打开的文件,进程地址空间,挂起信号,进程状态

    Linux通过slab分配器分配task_struct结构,达到对象复用和缓存着色。

    进程标识值:内核通过唯一的PID来标识每个进程。

    进程状态:进程描述符中state域描述了进程的当前状态。

    TASK_RUNNING(可执行)

    TASK_INTERRUPTIBLE(正被阻塞)

    TASK_UNINTERRUPTIBLE(不可中断)

    _TASK_TRACED(被其他进程跟踪)

    _TASK_STOPPED(进程停止执行)

    进程家族

    所有进程都是PID为1的init进程的后代,内核在系统启动的最后阶段启动init进程

    进程创建

    1 fork()通过拷贝当前进程创建一个子进程
    2 exec()函数读取可执行文件并将其载入地址空间

    线程实现

    在linux中,线程仅仅被视作一个与其他进程共享某些资源的进程,它只是一种进程间共享资源的手段

    内核线程:独立运行在内核空间中的标准进程

    它与普通进程的区别在于,内科线程没有独立的地址空间,只在内核空间运行。可以被调度或者抢占。

    第18章 调试

    通过打印调试

    Printk()具有健壮性,可以在任何时候,任何地方调用它。(除非在启动过程的初期就要在终端上输出)

    Printk()可以指定一个日志级别,内核把比某个特定级别低的所有消息显示在终端上。

    OOPS

    Oops是内核告知用户有不幸发生的常用方式。他的产生有很多原因,包括内存访问越界或者非法的指令

    如果oops在idle进程(pid为0)或者init进程(pid为1)时发生,或者在中断上下文时发生,或者持有一个锁或正在和硬件交互,系统将陷入混乱。

    探测系统

    用UID作为选择条件

    如果开发进程相关部分,可以通过把用户id作为选择条件来安排究竟是执行新算法还是老算法。通过在特定条件下执行新算法,可以保证安全性。

    使用条件变量

    可以创建一个全局变量作为分支选择开关,通过某种接口或者调试器进行操控。

    使用统计量

    可以在定义某事件的文件里,定义两个全局变量,统计事件发生规律,最好通过原子操作来实现。

    重复频率限制

    1.限制重复频率

    2.限制发生次数

  • 相关阅读:
    Lua中的loadfile、dofile、require详解
    100GB以上超大文件上传和断点续传服务器的实现
    50GB以上超大文件上传和断点续传服务器的实现
    20GB以上超大文件上传和断点续传服务器的实现
    10GB以上超大文件上传和断点续传服务器的实现
    Flash 以上超大文件上传和断点续传服务器的实现
    WebUploader 以上超大文件上传和断点续传服务器的实现
    HTML5 以上超大文件上传和断点续传服务器的实现
    VUE 以上超大文件上传和断点续传服务器的实现
    B/S 以上超大文件上传和断点续传服务器的实现
  • 原文地址:https://www.cnblogs.com/20135319zl/p/5339112.html
Copyright © 2011-2022 走看看