前言

我记得去年说过要讲一些干货分享给大家,Linux 系统编程是linux 驱动开发入门的条件
有人说为什么?
mmap select read write open ioctl socket poll epoll 这几个系统API 大家如果熟悉的话就非常熟悉了,其实就使用来讲就很基础了,本质上就是和内核进行交互, 这些api 在内核之中也有相应的API 函数,都是最基础的系统调用
如果只是单纯的做linux 系统应用层的开发,建议学习下 Nginx 的源码,这里面的设计模式很值得学习,我买了本Nginx 讲解源码的书
但是没看过,在几天前,我也下定了一个决心定了一个研究方向"内核开发", 研究底层,对工作是相当有益的
还有一点就是讲解内核的代码其实没啥太大的益处,关键是理解内核的设计模式,理解完设计模式才能开始做内核的开发
不理解也可以做,一般情况下,在知道的接口的情况下,也可以做,但是对整个系统来说是存在重大的安全隐患,我的建议是要会设计模式

我在这里给大家推荐几本关于内核基础入门的书:

  • << linux 内核设计与实现 >> 基于 2.6.x 内核 (我看过,很不错)
  • << 深入linux内核架构 >> (他讲解的是通用的内核结构,正在看,后半段,很不错)
    中等进阶的书籍
  • << 奔跑吧 linux 内核系列 >> (perfect 讲解的很nice,刚入手,浏览了个大概,正在跟着实验一步一步的做)
  • << 精通linux内核开发 >> //主要讲解的是linux内核开发的API 使用方法和注意事项 (也是浏览了个大概,纯纯的工具书)
    高阶 同志们 就是各种原生论文了, 因为到了这个时候就是纯研究了,就不是学习的问题了,在CSDN 中有一个dog250 的博主,他的博客行文风格,现在就是这样,妈的我男神可以说是

linux 系统应用层的话
基础读物:
我推荐”UNIX 3 步曲“ <<UNIX 网络编程 卷一>> <<UNIX 环境高级编程 卷三>> <<UNIX 高级网络编程 卷二>>
这三本书真的很nice,我读过,也可以说是第二个linux的启蒙读物, 我现在不敢说,完全掌握,但是我敢说,我会了,我敢说socket 掌握了是因为,kernel中关于 socket 的讲解 <<精通Linux 内核网络>> 有很详细的讲解,本身 socket 这个概念属于中等难度的概念,但是还得需要实验下
还有一本 关于bash 讲解的书籍

  • << Linux 命令行与shell 脚本编程大全>> //我的linux 启蒙读物,very nice ,在awk 脚本 和 sed 脚本 上太可惜,一直没有很熟练的应用起来
    TCP/IP 协议 也特别迷人 //协议基本的概念网上有很多
    但是要想仔细研究,推荐 <<TCP/IP详解>> 三件套,你就发现真的很迷人
    这些就是令我的脑子感到愉悦的东西
    今年有两个小遗憾 1. RUST 没实际的用起来(用起来就是极大的愉悦)2. ARM 指令集 刚刚接触, 这个是以后调试使用的关键
    我那个开源的小项目, 本来是打算用rust 构建的,现在只能退而求其次,用C++ 了
    根据身边的人和查阅的资料, 达到一定水平后,肯定就是研究各种学术论文了

PCB (进程控制块)

首先要明确一点,在系统当中,不是说我进程越多我这个软件就越牛,这是错误的,合理的分配系统资源才是最重要的
你可以这样想,你的编程的软件,其实是一个小世界,但是规则是你创建的,造物主就是你自己,顶级的造物主肯定是掌握了时间和空间法则的,进程就是你的法则链条,我们的职业与其说是程序员,不如说是造物主,编程之旅就是世界构建之旅,当然,cpu就是你这个世界的本源之力(是不是很有画面感)
如果只会在别人的世界中的,日常耕田,打怪,救死扶伤,是无法体会造物主的乐趣的

pcb 的基本概念

百度百科
为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block),它是进程实体的一部分,是操作系统中最重要的记录性数据结构。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消
一般疑惑的点在于,这个描述信息存储在哪里, 为什么要建立pcb 控制块
注解
刚开始我也很不理解,想不通, 直到后来在查找资料的时候,有这么一个概念,内核其实是一个,平台的驱动管理控制监控软件,然后在将所有的虚拟的概念,再换成抽象,那么你就会一点点的从这里面聚现出一个,概念图,换句话说,代码也是按照这个概念图,一点点的堆积起来的,可以看作是设计图纸,编译器的功劳)
程序和进程的区别

(照着别人的图又画了一遍,不知道是谁但是,总结的很好,很具象)
(最常见的进程描述图)
(此图来源,pdf 资料)

**进程的运行状态图: **

我感觉画个图很舒爽

这几个我感觉还是有助于理解的
那么其实有内核源码,但是代码不好看,根据图,然咱们自己写是不是也可以写出一个建议(有汇编基础的可以试试,本人不具备这个技能)
我打算在 内核的内存管理里面进行梳理总结
这里面简单概括下: pcb 是一个 进程的头部信息,保存着这个进程的堆栈的寄存器指令,(且包括保存了当前处理器的一切活动,抢占式的任务处理,所以涉及到上下文的切换,这个在内存管理里面去梳理最好,与内存紧密相关的就是进程),唯一的识别符就是进程id,你可以通过这个进程id,对进程进行操作,而且这个进程ID 是保存在内核中的,全局共享的,而且整个进程的调试方法有很多
(时空穿越,我是觉得不可能,但是程序可以做到,长生不可能,但是程序可以做到)
首先这个进程就是你的设计图纸,反正这东西,初学的时候,亚点感脚没有,现在感觉相当有用处

Linux 系统编程总结 (未完待续)相关推荐

  1. linux引数列项目过长,Linux 命令个人总结====== 未完待续 个人认为比较重要

    Linux 命令个人总结====== 未完待续 man [功能说明]: 查看帮助 [语法格式]: man [123456789]命令.文件. [选项参数]: 数字"1"表示用户命令 ...

  2. 构建Linux根文件系统(未完待续)

          所谓制作根文件系统, 就是创建各种目录, 并且在里面创建各种文件. 比如在/bin ./sbin 目录下存放各种可执行程序, 在/etc 目录下存放配置文件, 在/lib 目录下存放库文件 ...

  3. Linux基本操作命令(未完待续)

    基本命令 Echo[字符串]命令 输出字符串 Date获取时间 %t跳格 %H 小时 %M %s %J ,date "%Y-%m-%d %H:%M:%S",将系统时间设置为 dat ...

  4. linux porting 总结(未完待续)

    最近做了很多跨平台(主要是linux和windows)C++代码的移植工作,本文做一下总结.跨平台移植技术是由大量的细节构成的,所以下文包含了大量的针尖大小的细节,内容很庞杂.主要遇到以下几个类问题: ...

  5. linux安装包管理(未完待续)

    ubuntu系统 apt-get install redhat系统(后续实际使用再补充) rpm -qa 查询系统安装包 rpm -q 查询是否安装了某个包 rpm -qi 查询安装包的信息 rpm ...

  6. 【SCNU课堂笔记】计划任务、进程管理、Linux启动流程(未完待续)

    自己整理的课堂笔记,方便复习.

  7. 等几何分析编程记录 --- 未完待续

    文章目录 前言 eigen库中常用代码 矩阵置0 求逆 一.调用gismo细化后生成新的ele单元 1.1 理论分析 1.2 用一个单元的双二次曲面验证一下 1.3 程序和结果 二.将细化后的单元信息 ...

  8. linux文件循环备份,linux下的文件备份(未完待续)

    #/usr/bin/bsh path_file_list="/home/zwh/backup/" fn_file_list="$path_file_list/file_l ...

  9. mega raid linux,在lsi megaraid sas 8204elp 装linux系统(未完待续)

    在lsi megaraid sas 8204elp 装linux系统(未完待续) (2009-05-06 13:24:00) 标签: 杂谈 在目前最新的linux内核中,没有8204elp的raid驱 ...

最新文章

  1. 《为了你我愿意热爱整个世界》
  2. Codeforces 535C - Tavas and Karafs
  3. 再发 400 个红包,新年快乐!
  4. 常用公差配合表图_涨知识!常用的机械测量工具,你都知道吗?
  5. wxWidgets:wxMediaCtr类用法
  6. Linux的Nginx四:功能|模块
  7. JavaScript基础总结
  8. 再谈RDD、DataFrame、DataSet关系以及相互转换(JAVA API)
  9. vue --- 前端代理发送http请求
  10. MySQL中事务控制语句_Mysql事务控制语言
  11. paip.silverlight设计器载入异常NullReferenceException问题。
  12. .NET Framework高低版本兼容问题解决办法
  13. 如何快速发现XSS跨站攻击漏洞
  14. 2021多校第二场F 简单计算几何模板(球体相交体积)
  15. 人力资源管理专业知识与实务(初级)【6】
  16. 程序员修炼之道关键点总结和个人感悟
  17. C++综合练习——身份证
  18. 数据库入门-----Windows平台下按照和配置MySQL
  19. 免费stm32视频教程分享:心率检测仪的设计与实现
  20. 各大高权重搜索引擎博客矩阵链轮?

热门文章

  1. spring-mvc注解
  2. 利用Swarmkit构建Windows/Linux混合Docker集群
  3. poj——3177Redundant Paths
  4. XenApp / XenDesktop 7.6 初体验五 KEYWORDS
  5. asp.net中URL参数传值中文乱码的三种解决办法
  6. 云计算安全解决方案白皮书(二)
  7. 20 Very Useful Java Code Snippets
  8. 企业开展网络营销的六个阶段
  9. oracle函数胡书写,Oracle中序列表sequence的使用.docx
  10. 应用市场自然量预估_VIVO市场ASO实战详解