![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
操作系统
关于操作系统的知识
我要精通C++
这个作者很懒,什么都没留下…
展开
-
APUE-第三章-文件I/O
0.引用文件IO 第一天(标准IO)1.引言本章所说明的函数经常被称为不带缓冲的I/O(unbuffered I/0,与将在第5章中说明的标准I/O例程相对照)。术语不带缓冲指的是每个read和write都调用内核中的一个系统调用。这些不带缓冲的I/O函数不是ISO C的组成部分,但是,它们是POSIX.1和Single UNIX Specification的组成部分。2....原创 2022-05-09 19:21:02 · 323 阅读 · 0 评论 -
再学pipe
pipe函数原创 2022-05-09 18:06:56 · 181 阅读 · 0 评论 -
内存学习书籍参考
《CSAPP》《C++程序设计语言第4版》原创 2022-02-26 11:22:48 · 934 阅读 · 0 评论 -
atexit&on_exit
atexit函数原创 2021-11-20 01:12:55 · 300 阅读 · 0 评论 -
APUE-第七章-进程环境
1.本篇将学习*当执行程序时,main函数是如何被调用的;*命令行参数是如何传送给执行程序的;*典型的存储器布局是什么样式;*如何分配另外的存储空间;*进程如何使用环境变量;*各种不同的进程终结方式;*longjmp和setjmp函数以及它们与栈的交互作用;*进程的资源限制。2.main函数C程序总是从main函数开始执行,main函数的原型是int main(int argc,char *argv[]) ;其中,argc是命令行参数的数目,argv是指向参数的各个指针所构.原创 2021-11-20 17:02:02 · 387 阅读 · 0 评论 -
signal(SIGPIPE, SIG_IGN)
SIGPIPE信号处理为什么程序里要写signal(SIGPIPE, SIG_IGN)这个呢?找到一篇说这个内容的文章【signal(SIGPIPE, SIG_IGN)解析】原创 2021-07-09 22:21:12 · 619 阅读 · 0 评论 -
【经典阅读】CSAPP-3.0-程序的机器级表示-导读
计算机执行机器代码,用字节序列编码低级的操作,包括处理数据、管理内存、读写存储设备上的数据,以及利用网络通信。编译器基于编程语言的规则、目标机器的指令集和操作系统遵循的惯例,经过一系列的阶段生成机器代码。GCC C语言编译器以汇编代码的形式产生输出,汇编代码是机器代码的文本表示,给出程序中的每一条指令。然后GCC调用汇编器和链接器,根据汇编代码生成可执行的机器代码。在本章中,我们会近距离地观察机器代码,以及人类可读的表示——汇编代码。 当我们用高级语言编程的时候(例如C语言,Ja...原创 2022-01-02 13:28:13 · 440 阅读 · 0 评论 -
【经典阅读】CSAPP-3.3-程序的机器级表示-数据格式
由于是从16位体系结构扩展成32位的,Intel用术语“字(word)”表示16位数据类型。因此,称32位数为“双字(double words)”,称64位数为“四字(quad words)”.图3-1给出了C语言基本数据类型对应的x86-64表示。标准int值存储为双字(32位)。指针(在此用char*表示)存储为8字节的四字,64位机器本来就预期如此。x86-64中,数据类型long实现为64位,允许表示的值范围较大。本章代码示例中的大部分都使用了指针和long数据类型,所以都是四字操作。x...原创 2022-01-04 23:05:17 · 723 阅读 · 0 评论 -
【经典阅读】CSAPP-3.4.1-操作数指示符
大多数指令有一个或多个操作数(operand),指示出执行一个操作中要使用的源数据值,以及放置结果的目的位置。x86-64支持多种操作数格式(参见图3-3)。源数据值可以以常数形式给出,或是从寄存器或内存中读出。结果可以存放在寄存器或内存中。因此,各种不同的操作数的可能性被分为三种类型。第一种类型是立即数(immediate),用来表示常数值。在ATT格式的汇编代码中,立即数的书写方式是‘$后面跟一个用标准C表示法表示的整数,比如,$-577或$0x1F。不同的指令允许的立即数值范围不同,汇编器会自动选择最原创 2022-01-06 21:34:14 · 1235 阅读 · 0 评论 -
【经典阅读】CSAPP-3.4.0-访问信息-导读-寄存器
一个x86-64的中央处理单元(CPU)包含一组16个存储64位值的通用目的寄存器。这些寄存器用来存储整数数据和指针。图3-2显示了这16个寄存器。它们的名字都以%r开头,不过后面还跟着一些不同的命名规则的名字,这是由于指令集历史演化造成的。最初的8086中有8个16位的寄存器,即图3-2中的%ax到%bp。每个寄存器都有特殊的用途,它们的名字就反映了这些不同的用途。扩展到IA32架构时,这些寄存器也扩展成32位寄存器,标号从%eax到%ebp。扩展到x86-64后,原来的8个寄存器扩展成64位,标号从%r原创 2022-01-06 20:27:46 · 352 阅读 · 0 评论 -
【经典阅读】CSAPP-3.2-程序的机器级表示-程序编码
0.导读假设一个C程序,有两个文件 p1.c和 p2.c。我们用Unix命令行编译这些代码:linux> gcc -og -o p pi.c p2.c命令 gcc指的就是GCCC编译器。因为这是Linux上默认的编译器,我们也可以简单地用cc来启动它。编译选项-Og告诉编译器使用会生成符合原始C代码整体结构的机器代码的优化等级。使用较高级别优化产生的代码会严重变形,以至于产生的机器代码和初始源代码之间的关系非常难以理解。因此我们会使用-Og 优化作为学习工具,然后当我们增加优化级别时,再看原创 2022-01-03 09:15:17 · 1161 阅读 · 0 评论 -
【经典阅读】CSAPP-6.1.1 随机访问存储器
0.导读随机访问存储器(Random-Access Memory,RAM)分为两类: 静态的和动态的。静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵得多。SRAM用来作为高速缓存存储器,既可以在CPU芯片上,也可以在片下。DRAM用来作为主存以及图形系统的帧缓冲区。区。典型地,一个桌面系统的SRAM不会超过几兆字节,但是 DRAM却有几百或几千兆字节。1.静态RAM...原创 2022-01-25 22:16:23 · 1137 阅读 · 0 评论 -
【CSAPP】背景知识-调用者保存寄存器与被调用者保存寄存器
1.调用者保存与被调用者保存函数A调用了函数B,寄存器rbx在函数B中被修改了,逻辑上%rbx内容在调用函数B的前后应该保持一致,解决这个问题有两个策略,(1)在函数A在调用函数B之前提前保存寄存器%rbx的内容,执行完函数B之后再恢复%rbx的内容,这个 策略就称为调用者保存;(2)函数B在使用寄存器%rbx,先保存寄存器%rbx的值,在函数B返回之前,要恢复寄存器%rbx原来存储 的内容,这种策略被称之为被调用者保存。2.调用者保存寄存器与被调用者保存寄存器对于以原创 2022-01-05 23:17:44 · 9259 阅读 · 8 评论 -
用getconf LONG_BIT来判断机器是32位还是64位
1这台机器是32位的2.这台机器是64位的原创 2022-01-21 16:56:33 · 448 阅读 · 0 评论 -
Message from syslogd@master- kernel:NMI watchdog: BUG
Message from syslogd@master at Nov 24 18:06:43 ...kernel:NMI watchdog: BUG: soft lockup - CPU#6 stuck for 21s! [kubelet:1854]Message from syslogd@master at Nov 24 18:18:12 ...kernel:NMI watchdog: BUG: soft lockup - CPU#3 stuck for 23s! [docker-contai..原创 2021-11-25 09:39:36 · 3612 阅读 · 0 评论 -
popen使用不当导致产生了大量的僵尸进程
popen使用不当导致产生了大量的僵尸进程原创 2021-09-09 16:41:28 · 650 阅读 · 0 评论 -
ulimit -c 永久生效
操作系统ulimit生效原创 2021-09-02 19:26:30 · 1323 阅读 · 0 评论 -
CMU-CSAPP-Lecture1
1.数据溢出Great Reality 1Ints are not integers,floats are not reals.例子1:Is x^2 >= 0Int's : May not.Float's: Yes例子2:Is (x+y)+z = x+(y+z)?Unsigned & Signed int : YesFloat's : May not. (1e20+-1e20)+3.14 --->3.14 1e20+原创 2021-07-17 23:04:12 · 393 阅读 · 0 评论 -
kill -l 或者trap -lp查看各个信号
SIGSEGV: SIG 是信号名的通用前缀, SEGV 是segmentation violation,也就是存储器区段错误。原创 2021-07-15 14:00:48 · 552 阅读 · 0 评论 -
为什么CPU使用率超过200%
CPU使用率过好光功率的程序的CPU使用率大于300%,为什么会呢?原创 2021-07-02 10:00:42 · 5950 阅读 · 0 评论 -
UNIX时间戳转换网站
Unix时间戳转换工具网站链接原创 2021-06-23 14:33:24 · 199 阅读 · 0 评论 -
wait系列函数
《LinuxC编程从入门到精通》wait3-WEXITSTATUS(status)相关内容原创 2021-04-28 12:55:17 · 934 阅读 · 0 评论 -
linux/module.h
引用阅读原创 2021-04-25 21:13:53 · 219 阅读 · 0 评论 -
内存屏障
引用阅读1原创 2021-03-27 18:26:00 · 172 阅读 · 0 评论 -
【Linux内核分析与应用-陈莉君老师】课程相关索引
1.【Linux内核分析与应用-陈莉君老师】动手实践-把虚拟内存转换成物理地址2.【Linux内核分析与应用-陈莉君老师】从程序到进程3.【linux内核分析与应用-陈莉君老师】进程的一生4.【Linux内核分析与应用-陈莉君老师】进程的调度...原创 2021-01-04 21:09:07 · 654 阅读 · 0 评论 -
内核中的函数
基于linux-4.15.1内核E:\004-代码\002-内核源码\linux-4.15.1\linux-4.15.1\include\linux\decompress\mm.h#define malloc(a) kmalloc(a, GFP_KERNEL)E:\004-代码\002-内核源码\linux-4.15.1\linux-4.15.1\include\linux\slab.hstatic __always_inline void *kmalloc(size_t size, ..原创 2020-12-17 20:07:19 · 175 阅读 · 0 评论 -
【显卡相关】
ref1原创 2020-12-16 00:11:26 · 98 阅读 · 0 评论 -
【linux内核分析与应用-陈莉君】块设备驱动程序简介
1.块驱动程序块设备驱动程序提供了面向块的设备的访问.这种设备以随机访问的方式传输数据,并且数据总是有固定大小的块.块设备与字符设备的区别是什么呢?块设备可以通过mount文件系统,而字符设备是不可以的.数据经过块设备相比操作字符设备需要多经历一个数据缓冲机制,如图.2.块设备的模型...原创 2020-12-15 20:17:05 · 271 阅读 · 0 评论 -
【内核源码阅读】内核源码中的继承与抽象
1.struct inode_operationsD:\005-代码\001-开源项目源码\004-内核源码\linux-4.15.1\linux-4.15.1\include\linux\fs.hstruct inode_operations { struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int); const char * (*get_link) (struct dentry *, struct .原创 2020-12-15 19:58:13 · 163 阅读 · 0 评论 -
mknod
MKNOD(1) General Commands Manual MKNOD(1)NAME mknod - 建立块专用或字符专用文件总览 mknod [options] name {bc} major minor mknod [options] name p.原创 2020-12-15 16:44:49 · 302 阅读 · 0 评论 -
警告:ISO C90不允许混合使用声明与代码
ISO C90禁止将变量声明和代码混合使用,具体表现为在语句后面声明变量。原创 2020-12-15 15:45:15 · 3867 阅读 · 1 评论 -
【linux内核分析与应用-陈莉君】动手实践-编写字符设备驱动程序
1.设备驱动程序的定义方式两种:1.全局静态变量;2.内核提供的API.这里采用第二种方式来实现一个简单的虚拟设备驱动并且实现它的读写功能.原创 2020-12-15 10:20:31 · 305 阅读 · 0 评论 -
【字符设备驱动接口函数】源码阅读char_dev.c
E:\004-代码\002-内核源码\linux-4.15.1\linux-4.15.1\fs\char_dev.c/** * cdev_alloc() - allocate a cdev structure * * Allocates and returns a cdev structure, or NULL on failure. */struct cdev *cdev_alloc(void){ struct cdev *p = kzalloc(sizeof(struct cdev),.原创 2020-12-14 23:20:25 · 177 阅读 · 0 评论 -
【linux内核分析与应用-陈莉君】字符设备驱动
1.什么是字符设备字符设备是指只能一个一个字节进行读写操作的设备,不能随机读取设备中的每一个数据,取数据要按照先后次序来进行,字符设备时面向流的设备,常见的字符设备有:鼠标,键盘,串口,控制台,led等.一般每一个字符设备或者块设备都会在dev目录下对应一个设备文件,Linux用户层程序通过设备文件来使用驱动程序,操作字符设备或者块设备.2.如何来描述字符设备...原创 2020-12-14 21:40:42 · 532 阅读 · 0 评论 -
【linux内核分析与应用-陈莉君】设备驱动模型
1.设备驱动模型的引入为什么要引入设备驱动模型?由于linux支持世界上所有的不同功能的硬件设备,导致linux中有一般的代码是设备驱动而且随着硬件的快速升级换代,设备驱动的代码量也快速增长,为了设备多样性带来的linux驱动开发的复杂度以及设备热插拔处理电源管理等,linux内核提出了设备模型,也成为了driver module的概念.2.sys文件系统...原创 2020-12-14 17:57:29 · 389 阅读 · 0 评论 -
【linux内核分析与应用-陈莉君】IO空间管理
1.设备控制器什么是设备控制器呢?它是计算机中的一个实体,其主要职责是控制一个或多个I/O设备,以实现I/O设备和处理器之间的数据交换.它是CPU与I/O设备之间的接口,它通过控制总线接收从CPU发来的命令并去控制I/O设备工作.控制器相当于CPU与外设打交道的一个助理,让处理器从繁杂的设备控制事务中解放出来.2.I/O空间的管理设备通常会提供一组寄存器来控制设备,读写设备以及获取设备的状态,这些寄存器就是控制寄存器,数据寄存器和状态进村器,它们位于控制器中.从编址方式来说原创 2020-12-14 17:13:19 · 229 阅读 · 0 评论 -
【linux内核分析与应用-陈莉君】设备驱动概述
1.为什么要引入设备驱动程序计算机中三个最基础的物质基础是:CPU内存输入输出设备.与I/O设备相比,文件系统是一种逻辑意义上的存在,它只不过使得对设备的操作更方便,更有组织,更接近人类的思维方式,可以说文件操作是对设备操作地组织与抽象,而设备操作时对文件操作的最终实现.如何让机器般冰冷的硬件设备拥有灵性,从而使得控制设备像操作文件一样方便有效,这个是本章需要讨论的设备驱动问题.2.设备驱动程序的作用...原创 2020-12-14 14:32:51 · 370 阅读 · 0 评论 -
【内核文件系统】源码阅读stat.h
1.源码本代码对应的内核版本是4.15.1在我的电脑中的位置是:E:\004-代码\002-内核源码\linux-4.15.1\linux-4.15.1\include\uapi\linux\stat.h源码如下:/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */#ifndef _UAPI_LINUX_STAT_H#define _UAPI_LINUX_STAT_H#include <linux/typ原创 2020-12-14 01:49:15 · 617 阅读 · 0 评论 -
【linux内核分析与应用-陈莉君】动手实践-编写一个文件系统
1.一些数据结构file_system_type--文件系统类型的结构体super_block --每个注册的文件系统都会有对应的超级块,用于存储特定文件系统的习性inode --存放具体文件的信息dentry --目录项,方便查找文件vfsmount --用于挂载,这个是老版本的,新版本的将vfsmount放在了mount结构体中编写文件系统的过程实际上就是填充这些数据结构并添加进系统的过程....原创 2020-12-12 15:13:35 · 1092 阅读 · 0 评论 -
【linux内核分析与应用-陈莉君】页高速缓存机制及读写
1.文件系统的读写单位文件系统的读写单位是块;块的大小是2的n次方个扇区(每个扇区512字节),可以是1k,2k,4k或者4M等.原创 2020-12-12 13:07:09 · 279 阅读 · 0 评论