《Linux系统编程训练营》1-2_多核调度预备知识

9 月 24 日
阅读 10 分钟
176
问题:内核对进程调度时发生了什么?进程调度的本质任务 / 进程切换即:上下文切换,内核对处理器上的进程进行切换“上下文” 指 : 寄存器上的值“上下文” 指 :将寄存器的值保存到内存中(进程被剥夺处理器,停止执行)将另一组寄存器的值从内存中加载到寄存器(调度下一个进程执行)进程调度的本质当时间片耗完,不管进...

《Linux系统编程训练营》1-1_初探 Linux 系统调度

7 月 28 日
阅读 10 分钟
243
进程调度策略分析已知:父进程创建子进程后,父子进程同时运行(应用程序从可执行文件变成进程的过程)问题:如果计算机只有一个处理器,父子进程以什么方式执行(拿到了处理器的时间片资源,执行指令)?Linux 系统调度内核具有进程调度的能力,多个进程可同时运行微观上,处理器同一时间只能执行一个进程同时运行多个进...

《Linux系统编程训练营》0-15_信号处理设计模式

5 月 28 日
阅读 14 分钟
418
问题:如何编写信号安全的应用程序???信号处理回避模式Linux 应用程序安全性讨论场景一:不需要处理信号应用程序实现单一功能,不需要关注信号如:数据处理程序,文件加密,科学计算程序,等场景单一的程序场景二:需要处理信号应用程序长时间运行,需要关注信号,并及时处理如:服务端程序,上位机程序,等场景复杂...

《Linux系统编程训练营》0-14_信号优先级与安全性

5 月 21 日
阅读 8 分钟
384
信号优先级分析问题:对于同一个进程,如果存在两个不同的未决实时信号,那么先处理谁?信号优先级的概念信号的本质是一种软中断(中断有优先级,信号也有优先级)对于同一个未决信号,按照发送先后顺序送达进程对于不同的未决实时信号,信号值越小优先级越高不可靠信号与可靠信号同时未决严格意义上,没有明确规定优先...

《Linux系统编程训练营》0-13_信号可靠性剖析

5 月 15 日
阅读 9 分钟
258
深度剖析信号可靠性问题:基于信号发送的进程间通讯方式可靠吗?信号查看 (kill -l) {代码...} 信号的分类不可靠信号 (传统信号,也是已经被证用赋予含义的信号)信号值在 [1, 31] 之间的所有信号可靠信号 (实时信号,未被证用且赋予含义,可自定义使用)信号值在 [SIGRTMIN, SIGRTMAX] , 即: [34, 64]SIGRTMIN 👉 34SI...

《Linux系统编程训练营》0-12_信号发送与处理(下)

5 月 9 日
阅读 18 分钟
281
信号处理三大特性问题:三种注册信号与处理函数的方法又什么区别?信号的 OneShot 特性System V 风格的 signal 函数,注册的信号处理是一次性的进程收到信号后,调用由 signal 注册的处理函数处理函数一旦执行,之后进程通过默认的方式处理后续相同信号如果想要重复触发,那么必须再次调用 signal 注册处理函数 {代码......

《Linux系统编程训练营》0-11_信号发送与处理(上)

4 月 15 日
阅读 4 分钟
302
信号的概念与分类问题:按下 Ctrl + C 后,命令行中的前台进程会被中止。为什么???什么是信号?信号是一种 “软件中断”, 用来处理异步事件内核发送信号到某个进程,通知进程事件的发生时间可能来自硬件,可能来自用户输入,可能来自除零错误信号是一种类型的进程间通讯方式(一个进程向另一个进程发送信号)A 进程发生事...

《Linux系统编程训练营》0-10_守护进程深度分析

1 月 9 日
阅读 5 分钟
331
1、 关闭标准输入输出和标准错误输出2、 将 stdin 关联到终端设备 : STDIN_FILENO -> 03、 将 stdout 关联到终端设备 : STDOUT_FILENO -> 14、 将 stderr 关联到终端设备 : STDERR_FILENO -> 2

《Linux系统编程训练营》0-9_Linux 进程层次分析

2023-09-24
阅读 10 分钟
539
详解 Linux 进程组每个进程都有一个进程组号 (PGID)进程组:一个或多个进程的集合(集合中的进程并不孤立)进程组中的进程通常存在父子关系,兄弟关系,或 功能相近进程组可方便进程管理(如:同时杀死多个进程,发送一个信号给多个进程)每个进程必定属于一个进程组,也只能属于一个进程组进程除了有 PID 外,还有 PGID...

《Linux系统编程训练营》0-8_Linux 终端与进程

2023-09-18
阅读 4 分钟
865
详解控制台与终端有趣的问题:Linux 的终端,控制台,TTY, PTY 究竟是什么?它们与进程有什么关系?历史回顾:控制台控制台是一个直接控制设备的面板(属于设备的一部分)计算机设备的控制台:按键 & 指示灯 (键盘 & 显示器)早期的电子计算机必然有一个控制台历史回顾:终端 (Terminal)终端是一台独立于计算机的机器...

《Linux系统编程训练营》0-7_进程创建大盘点

2023-09-17
阅读 7 分钟
496
vfork 与进程创建进程创建回顾 {代码...} 问题:进程创建是否只能依赖于 fork() 和 execve() 函数?再论进程创建fork() 通过完整复制当前进程的方式创建新进程execve() 根据参数覆盖进程数据(一个不留)pid_t vfork(void);vfork() 用于创建子进程,然而不会复制父进程空间中的数据vfork() 创建的子进程直接使用父进程空...

《Linux系统编程训练营》0-6_深入 Linux 系统

2023-09-17
阅读 10 分钟
308
进程的数据输入输出问题:进程参数 和 环境变量 对于进程意味着什么?进程参数和环境变量的意义一般情况下,子进程的创建是为了解决某个子问题子进程解决问题需要父进程 "数据输入" (进程参数 & 环境变量)设计原则:子进程启动时必然用到的参数使用进程参数传递子进程解决问题可能用到的参数使用环境变量传递思考 ...

《Linux系统编程训练营》0-5_环境变量编程

2023-09-16
阅读 14 分钟
731
初识环境变量问题:环境变量是什么?有什么意义? {代码...} main 函数(默认进程入口)int main(int argc, char *argv[], char *env[])argc 命令行参数个数 (启动参数)argv[] - 命令行参数数组 (启动参数)env[] - 环境变量数组(最后一个元素为 NULL)什么是环境变量环境变量是进程运行过程中可能用到的 "键值对" (N...

《Linux系统编程训练营》0-4_进程参数编程

2023-09-11
阅读 6 分钟
812
进程空间概要分析问题execve(...) 的参数分别是什么?有什么意义? {代码...} execve 的本质是系统调用而非函数!!main 函数(默认进程入口)int main(int argc, char *argv[]) {代码...} 注意:启动参数和环境变量 【拷贝】 于父进程进程空间概要进程参数存储分析mem.c {代码...} {代码...} 下面程序输出什么?为什么...

《Linux系统编程训练营》0-3_初试 Linux 进程

2023-09-07
阅读 10 分钟
1.1k
问题: strace 输出中的 execve(...)究竟是什么?进程理论状态切换进程生命周期Linux进程基本概念进程是 Linux 任务的执行单元,也是 Linux 系统资源的分配单位每个 Linux 应用程序运行后由一个或多个进程一个 Linux 进程可以执行一个或多个程序Linux 进程有多种不同状态(即:Linux 进程有不同的活法)Linux 进程状态剖...

《Linux系统编程训练营》0-2_深入理解系统调用

2023-09-06
阅读 51 分钟
1.1k
一般来说,大部分 CPU 至少具有两种工作方式高特权级 (Ring 0) : 可以访问任意的数据,包括外围设备,比如网卡、硬盘等(内核模式)

《Linux系统编程训练营》0-1_Linux系统概要

2023-06-29
阅读 3 分钟
1.3k
再论计算机系统计算器系统由”躯体“和”灵魂“两部分组成”躯体“ : 构成计算机系统的电子设备(硬件)”灵魂“ :指挥 ”躯体“ 完成 ”动作“ 的指令序列 (软件)”躯体“ 核心 :中央处理器 (CPU)”灵魂“ 核心 :操作系统(OS) {代码...} 数据输入与输出是计算机系统不可获取的部分计算任务执行流程通过交互设备或网络向计算机...

《Linux网络开发必学教程》31_文件服务器最终实现

2023-06-10
阅读 3 分钟
1.3k
问题: # favicon.ico 简介 是什么?请求如何处理?favicon.ico 简介favicon.ico 是网页上的图标文件名称:默认名称位 favicon.ico尺寸:16x16、32x32、48x48、64x64、128x128颜色: 8 位、24 位 或 32 位一般说,在网页中可以通过 HTML 语句设置图标文件<link rel="shortcut icon" href="/favicon.ico...

《Linux网络开发必学教程》30_文件浏览交互涉及

2023-06-08
阅读 9 分钟
1.1k
问题:浏览器与文件服务器如何交互?浏览器与文件服务器的交互文件浏览点击列表中的文件夹 → 进入子文件夹(展示子文件夹列表)文件下载点击列表中的文件 → 下载目标文件错误处理向服务器发送错误请求 → 浏览不存在的文件夹 / 下载不存在的文件文件浏览交互实现实现中的关键概念共享文件夹(root)服务端启动时指定的共...

《Linux网络开发必学教程》29_动态创建交互页面

2023-06-05
阅读 7 分钟
1.2k
问题:如何创建浏览器中的文件展示页面?再论前端页面交互页面分析静态部分表格,页面结构动态部分文件浏览路径 (Path)文件列表(Table) {代码...} 文件列表分析静态表格标题行表格列表结构动态部分表格行数据 {代码...} 文件列表接口函数及数据结构Table *CreateTable();Table *InsertRow(Table *table, RowInfo *info...

《Linux网络开发必学教程》28_浏览器请求响应实现

2023-06-04
阅读 7 分钟
1k
文件服务器架构职责定义主线程命令行输入,管理员可控制服务端工作状态监听线程服务端启动后对客户端连接进行监听的工作环境通讯线程客户端连接成功后与服务端的数据交互环境主线程 {代码...} {代码...} 交互流程一交互流程二监护线程 {代码...} 请求响应流程通讯流程 {代码...} 编程实验:实现请求响应main.c {代码...}...

《Linux网络开发必学教程》27_文件服务器可行性分析

2023-06-04
阅读 8 分钟
948
需求分析服务端启动时指定某本地文件夹作为网络共享文件夹共享文件夹中的所有文件及子文件夹均可被客户端访问使用浏览器作为客户端,在浏览器中可“看到”所有共享文件用户可在浏览器中将目标文件下载到本地服务端可暂定服务,但不影响正在下载目标文件的客户端技术可行性分析服务端网络通讯基于 Http 协议与客户端浏览器...

《Linux网络开发必学教程》26_Web 前端开发基础

2023-06-04
阅读 4 分钟
913
关于 Http 应用程序基于 Http 的应用程序本质上是一种特殊的 C/S 模型应用Http 应用程序的底座是 TCP 协议(即:socket 可完成应用)常见的 Http 客户端为浏览器,服务端为 Web 服务器简单理解:Http 应用程序 ←→ TCP 应用程序 + 文本处理应用程序值得思考的问题浏览器为什么能成为 “万能客户端” ?什么是 HTML ?HTML ...

《Linux网络开发必学教程》25_Http 协议基础

2023-06-03
阅读 2 分钟
1.4k
Http 是什么?Http 作为 WWW 的重要组成部分被提出(World Wide web)而当时的 WWW 是为了帮助研究者更好的进行知识共享基本理念:文档之间的相互关联形成超文本,最终连城相互参阅的 WWWHttp (Hyper Text Transfer Protocol)用于定义文档之间如何跳转,即:文档传输协议Http 是什么?Http 是位于 TCP/IP 之上的应用层通...

《Linux网络开发必学教程》24_物联网服务模块实现(非必要)

2023-06-03
阅读 2 分钟
1.3k
笔者无对应硬件开发板,对涉及硬件操作部分的代码不做全部展开。(不影响主线理解)问题:服务模块如何获取真实环境信息?外设简介设备驱动开发基础GPIOGPIO 即: General-Purpose Input/Output, 通用型输入输出在硬件设备上,GPIO 通常表现为引脚 (Pin), 输出为高电平或低电平程序设计中,可通过代码控制指定 GPIO 的...

《Linux网络开发必学教程》23_客户端服务端交互实现

2023-06-03
阅读 3 分钟
974
问题:客户端业务逻辑如何实现?与服务设备交互细节如何设计?客户端业务逻辑实现用户输入处理字符串空格处理,分割获取命令与参数服务信息处理字符串预处理,分割获取服务命令存储服务命令与设备地址之间的映射(命令字符串 👉 地址字符串)客户端业务逻辑实现 - 用户输入处理 {代码...} {代码...} {代码...} 服务端逻辑...

《Linux网络开发必学教程》22_客户端设计与初步实现

2023-05-30
阅读 6 分钟
562
问题:Response Task 和 Server Task 的业务逻辑如何实现?客户端如何实现?再论交互流程交互详细设计(Message::payload)客户端主动发起服务查询(局域广播)服务设备将自身能提供的服务信息及用法返回(字符串描述)客户端根据收到的服务用法向设备发起请求(字符串描述)服务设备接收命令并匹配服务,并返回服务结果...

《Linux网络开发必学教程》21_智能家居服务发现实现

2023-05-30
阅读 5 分钟
780
服务设备软件代码复用将网络通讯框架移植到开发板,之后,可使用框架中的组件实现 Response Task 和 Server Task框架移植注意事项Lwip 是微型 TCP/IP 协议栈 (并非完整 TCP/IP协议栈)支持 socket 接口,但一些功能未实现socket 接口所在头文件不同于 Linux 和 Window 平台完成可执行测试,对测试中出现的问题及时修复...

《Linux网络开发必学教程》20_物联网设备 WIFI 模块实现(非必要)

2023-05-28
阅读 7 分钟
1.1k
问题:如何在设备上进行 WIFI 编程?Lwip (Light weight IP) 简介Lwip 是轻量化的TCP/IP,是一个小型开源的 TCP/IP 协议栈LwIP 的设计目标是用较少的资源实现完成的 TCP/IP 协议栈Lwip 能在操作系统中运行,也能在无操作系统的情况下独立运行Lwip 提供了 Socket API 和 Netconn APILwip 的主要特性支持 ARP, ICMP, IGMP...

《Linux网络开发必学教程》19_分布式智能家居项目雏形

2023-05-23
阅读 3 分钟
1.1k
需求分析客户端进入室内后能够主动发现服务(如,环境服务,灯光服务)各种服务可以有不同的载体(如:由不同设备提供)各种服务之间,服务与客户端之间完全无耦合(服务可自由增减)客户端可以是移动 APP ,可以是桌面软件 。。。技术可行性分析发现服务: UDP 广播 + 自定义协议客户端主动广播服务查询协议包服务设备...