![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux内核
文章平均质量分 61
学习Liunx内核
W2155
这个作者很懒,什么都没留下…
展开
-
LIUNX系统编程:动态库加载(2)
虚拟地址空间并不是有操作系统一个完成的,而是需要cpu,编译器,操作系统,三者共同联动,互相配合,编译器在编译的时候就已经生成虚拟地址了,CPU的MMU + 操作系统的页表才能讲虚拟的地址转化为物理地址。使用绝对编址的方式,对每个指令,进行编址,然后将链接了哪些动态库,main函数的地址(虚拟地址),代码区,数据区,已初始化的数据.....各个区域的大小划分,存储到到表头中。当指令寄存器,执行指令的时候,需要访问物理地址,这是时候cpu会给MMU一个请求,MMU区页表中查询,将虚拟的地址转化为物理地址。原创 2024-04-29 11:52:34 · 345 阅读 · 0 评论 -
LINUX系统编程:动静态库的制作
gcc -o main mian.c -L./ -lmymath //库的名字是去掉前缀和后缀的libmymath.a mymath。例:我写了一个函数,我想让别人使用,但是并不像让使用者看到我写的代码,就可以把我的代码制作成一个库,提供给使用者。ar -rc libmymath.a add.o sub.o//-rc(crate和replace)将add.c sub.c add.h sub.h 制作成静态库。1.首先要将add.c sub.c编译生成.o文件。使用-L选项制定库的路径,-l指定库的名称。原创 2024-04-26 20:42:24 · 195 阅读 · 0 评论 -
LINUX系统编程:软硬链接,动静态连接
什么是硬连接?,我们或许可以用操作清楚的认识什么是硬连接。在我们学习文件的时候这个数字好像完全没有被提到过,这个代表什么意思呢?这个代表该文件的inode编号与文件映射的次数,现在该文件的inode只与test.c这个文件名映射,所以该数字为1,这时候使用ln命令,给该文件建立一个硬连接文件。ln test.c test.a//为test.c建立名为test.a的硬连接看这两个文件的标号变为2,说明这两个文件使用的是一个inode编号,inode的编号一样说明他们本质上是一个文件。原创 2024-04-26 19:47:45 · 436 阅读 · 0 评论 -
LIUNX系统编程:文件系统
在用户使用LIUNX系统的时候,我们查找一个文件用的都是路径去查找,但是想找到一个磁盘的文件,必须找到该文件的inode,怎么用一个路径,就找到文件的inode的呢?依次类推,直到根目录,根目录的inode编号是确定的,系统是直接知道的,开机的时候,就会用这个编号,将根目录打开到内存当中,根目录的inode编号是2。想找到test.c,就必须找到先找到buffer目录的inode,想找到buffer目录的inode,就必须先找到code的目录的inode。原创 2024-04-21 18:41:01 · 328 阅读 · 0 评论 -
LIUNX文件系统
了解文件系统,首先要了解磁盘是如何存储和读取数据的。原创 2024-04-18 17:37:53 · 535 阅读 · 0 评论 -
LINUX系统编程:缓冲区
缓冲区分成和先说结论,语言的缓冲区可以减少系统调用的次数进而提高向文件写入和读取的效率。向屏幕打印,无非就是向屏幕这个文件的缓冲区写入,然后在由操作系统刷新到显示器文件,这样显示器就可以显示内容了。直接调用系统调用,写到显示器文件的缓冲区,然后由操作系统刷新。原创 2024-04-14 20:54:55 · 268 阅读 · 0 评论 -
LINUX系统编程:stdin的实现
主要就是根据打开方式,打开文件,创建一个myFILE,返回个myFILE*即可。5.刷新的策略,不同文件的刷新策略不同,显示器文件为行刷新,普通文件为全刷新。C语言的输入接口,都会向FILE*stdin里面的缓冲区打印。fflush把当缓冲区的内容,清空,拷贝到系统的缓冲区。向c语言缓冲区写入,再根据刷新策略,刷新到系统缓冲区。首先我们要封装的就是FILE结构体。1.一个C语言的缓冲区buffer。fopen是对open的封装。这个结构体大概含有以下内容。3.当前缓冲区的大小。原创 2024-04-15 09:11:56 · 197 阅读 · 0 评论 -
LINUX重定向的原理
文件描述的分配规则:最小没有使用的下标会分给最新打开的文件正常printf打印是在stdin标准输出显示器打印,stdin标准输出显示器的fd是1。所以只要把显示器文件stdin给关闭,再打开一个文件,这个文件的 fd根据规则就会是1。但是在上层,printf打印只会向fd为1的文件的缓冲区打印,这样就完成了狸猫换太子。把log.txt的文件描述符打印到log.txt中。运行结果。原创 2024-03-06 21:08:21 · 391 阅读 · 0 评论 -
Lniux Shell外壳
简单说shell就是命令行解释器主要作用就是将我们的命令翻译给系统,在把系统处理结果反馈给使用者。一个操作系统从广义上来看如图 从狭义上看其实就是内核如图。原创 2023-10-25 19:59:13 · 57 阅读 · 5 评论 -
LINUX粘滞位
粘滞位其实是给other设置的一个权限位t,t具有x的意义,但是对设有粘滞位的目录进行了进一步的限定,设有粘滞位的目里的文件只有该文件拥有者和root有删除的权限,其他人一概不允许。原创 2023-11-05 10:25:04 · 72 阅读 · 3 评论 -
冯诺依曼体系结构
我们知道cpu的计算速度是非常非常快的,但是我们输入设备和输出设备的速度与cpu相比是非常缓慢的,如果输入输出设备与cpu直接进行交互,cpu估计会被闲死,cpu会一直在等输入和输出这个时候为了解决这个问题,内存就出现了,,这个时候计算机的效率就还不错了,最重要的是他让计算机的价格大幅度下降的同时,效率还有所保证,如果输入输出设备和cpu进行直接交互想要提升效率就必须增大cpu的高速缓存,高速缓存的价格是非常非常高的。1.计算机数据流动的方向是 输入设备 ->内存 ->cpu ->内存 ->输出设备。原创 2023-12-02 19:46:04 · 28 阅读 · 0 评论 -
LINUX普通用户如何sudo
4.按下i进入插入模式(右下角是insert说明是插入模式)9.重新进入底行输入q!7.shift + : 进入底行模式。1.首先我们要切换到root账号。5.将普通用户添加上去。6.ESC退出插入模式。原创 2023-11-05 08:04:05 · 99 阅读 · 1 评论 -
LINUX 权限
了解文件权限,如何修改文件权限原创 2023-11-05 10:05:07 · 46 阅读 · 1 评论 -
LINUX中进程调度算法
LINUX中有四种调度类(优先级从高到低),这里我们只介绍我们最常用的,完全公平类。原创 2023-12-10 10:58:40 · 33 阅读 · 0 评论 -
LINUX进程退出进程等待
1.进程退出1.1进程退出方式:1.2进程退出函数1.3退出码转化为错误描述2.进程等待2.1进程等待的必要性:2.2进程等待方法waitpid引言:创建一个进程,必然是要这个创建出来的进程去完成某种任务,该进程必须把任务的完成结果返回给其父进程,这就像打游戏 你接受了一个任务,任务完成后,还必须回去告诉发布任务的人,我完成这个任务啦,奖励才会到你的手。原创 2023-12-24 18:50:05 · 962 阅读 · 0 评论 -
LINUX命令行参数
argc是这个命令行参数的个数argv是一个char*的指针数组,用来接收命令行参数,argv[0]存储的是可执行程序的路径,argv这个数组必须是以NULL结尾。原创 2023-12-19 11:27:11 · 331 阅读 · 0 评论 -
LIUNX进程程序替换
a.一个程序,只能执行自己的代码b.如果想要一个程序执行,别的程序的代码呢?我们就可以创建一个子进程,将这个子进程替换为我们想要执行的程序。原创 2023-12-29 16:39:03 · 368 阅读 · 0 评论 -
LINUX环境变量
环境变量是系统内置具有特殊用途的变量。环境变量本质其实就是我们在编程中的变量,因为linux操作系统就是用C语言和C++编写的。这个特殊用途可以指什么呢,了解linux的人都知道liunx的命令,其实大多数都是一个可执行的程序,但是为什么我们在执行命令的时候就不用加上路径,在执行自己的程序时就必须加上路径?这是因为在我们执行命令时,系统会在PATH环境变量中寻找我们可执行程序.我们用echo $PATH命令查看PATH环境变量的内容,在执行指令的时候会从这些路径寻找命令,每个路径用冒号隔开。原创 2023-12-18 17:00:41 · 800 阅读 · 0 评论 -
LINUX进程地址空间
有了上面的知识储备,我们也就能解释,为什么一个变量有两个值,地址是相同的问题。虽然这两变量的虚拟地址是相同的,但是别忘了,映射关系可以不同,修改一下映射关系,子进程pid地址就可以映射到物理地址的其他位置。下图可以非常清楚的表示。原创 2023-12-26 17:59:33 · 368 阅读 · 0 评论 -
LINUX文件fd(file descriptor)文件描述符
引言:在学习C语言的时候,我们见过很多的文件的接口,例如fopen,fwrite,fclose等等,但是仅仅凭借C语言的知识,我们并没有办法完全理解,只是知道怎么去用,希望看完这篇文章能加深你对文件的理解。原创 2024-01-21 20:05:11 · 875 阅读 · 0 评论