![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 95
IfYouHave
这个作者很懒,什么都没留下…
展开
-
Linux——补充点(进程切换及页表映射)
Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。该结构体存放在叫做任务列表的双向循环列表中!所学习过的包含:在进程地址空间中,栈区,代码区等一部分区域,是被整体所使用的!),因此堆是使用一个vm_area_struct小的结构体进行区分,使用双链表的形式进行管理!原创 2023-09-29 18:02:04 · 770 阅读 · 0 评论 -
Linux——进程信号
信号量和信号并无关联,是两个完全不同的性质!1. 掌握Linux信号的基本概念2. 掌握信号产生的一般方式3. 理解信号递达和阻塞的概念,原理。4. 掌握信号捕捉的一般方式。5. 重新了解可重入函数的概念。6. 了解竞态条件的情景和处理方式7. 了解SIGCHLD信号, 重新编写信号处理函数的一般处理机制每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到。原创 2023-09-17 11:58:10 · 441 阅读 · 0 评论 -
Linux——进程间通信(管道及共享内存)
进程想要通信,难度其实是比较大的先让不同进程看到同一份资源(内存空间)所以进程看到同一块“内存”,不能隶属于任何一个进程,更应该强调共享为什么要进行进程通信?交互数据,控制,通知等的目标进程间通信的必要性?单进程无法使用并发能力,更加无法实现多进程协同进程间通信是一种手段,目的是为了实现多进程协同管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”管道都是单向传输内容的,传输的都是“资源”(计算机通信领域设计的一种单项通信方式)原创 2023-09-13 17:14:29 · 373 阅读 · 0 评论 -
Linux——基础IO(2)及动静态库多种方式使用及制作
有关上篇文章 基础IO(1) 问题遗留解答及总结:1. 如下述代码,重定向后,使用C标准库函数写入后,使用系统调用接口close关闭文件后,运行后,其重定向文件内部没有数据!而在close之前使用C标准库提供的fflush函数后,文件内部便有了数据,作何解释?close(1);return 1;close(fd);return 0;原创 2023-08-26 18:28:05 · 430 阅读 · 0 评论 -
Linux——基础IO(1)
C默认会打开三个输入输出流,分别是stdin, stdout, stderr仔细观察发现,这三个流的类型都是FILE*, fopen返回值类型,文件指针打开文件的方式:w Truncate(缩短) file to zero length or create text file for writing. The stream is positioned at the beginning of the file.原创 2023-08-11 18:37:29 · 476 阅读 · 0 评论 -
Linux——进程控制
fork创建子进程,系统中多了一个进程,及包含进程对应的PCB结构体以及对应的地址空间及页表映射关系,并将代码和数据加载到内存中,并将该进程加载到运行队列,等待操作系统调度器的调度!阻塞等待和非阻塞等待,一般都是在内核中阻塞,等待被唤醒,如scanf和cin,底层必定封装了系统调用(阻塞等待),父进程通过调用waitpid来进行等待,如果子进程没有退出,waitpid这个系统调用,立马返回(非阻塞)然后shell读取新的一行输入,建立一个新的进程,在这个进程中运行程序 并等待这个进程结束。原创 2023-07-30 20:41:50 · 717 阅读 · 0 评论 -
Glibc——堆利用机制[拓展]
堆是每个程序被分配到的一块内存区域,和栈的区别主要在于堆内存是动态分配的。也就是说,程序可以从“heap“段请求一块内存,或者释放一块内存。是ELF文件当中的一个段。另外,堆内存是全局的,即在程序的任意位置都可以访问到堆,并不一定要在调用“malloc”的那个函数里访问。这是因为 C 语言使用指针指向动态分配的内存。但相比访问栈上的静态局部变量,使用指针也带来了一定的开销。原创 2023-06-08 11:14:22 · 640 阅读 · 1 评论 -
Linux——进程地址空间
当我们的程序,在编译的时候,形成可执行程序(可重定向二进制文件)的时候,没有被加载到内存时,我们程序内部,有地址吗?myprocSections:通过上述命令查看可知,虚拟存储地址可以看出:其实已经有地址了,程序需要链接动静态库,而使用动静态库函数就是用函数的地址进行调用,可执行程序其实在编译的时候,内部就已经有了地址!地址空间不要仅仅理解成为是OS内部要遵守的,其实编译器也要遵守!!!原创 2023-06-07 16:57:29 · 1392 阅读 · 0 评论 -
Linux——进程优先级&&环境变量
如果环境中不存在name,则将string添加到环境中,如果name确实存在,则环境中name的值将更改为value。通过 export testFor_11=你好, 设置环境变量,在通过系统调用getenv获取可得出设置其信息值,因此可得出以上结论。如图其中 argc 为 3,对应的argv分别是 "./argctest","-a","-b"getenv()函数在环境列表中搜索环境变量名,并返回一个指向相应值字符串的指针。3、字符串所指向的字符串成为环境的一部分,因此改变字符串也改变了环境。原创 2023-06-05 20:04:56 · 705 阅读 · 0 评论 -
Linux——进程概念
它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。第一段进程一定有运行状态,而显示器属于外设,外设速度相比cpu很慢很慢,当进程向显示器打印的时候,此时进程进入阻塞队列,而阻塞队列完成后,再次回到运行队列,循环往复,只是进程在阻塞队列相比在运行队列待得时间更长。可知PCB所有进程的属性,Linux内核是由C语言编写的,因此对进程属性的描述,就可以使用结构体的描述,而对进程的管理,就变为了对进程PCB结构体链表的增删改查。原创 2023-03-30 18:17:28 · 688 阅读 · 0 评论 -
Linux——冯诺依曼体系结构/操作系统
在计算机中,操作系统是其最基本也是最为重要的基础性系统软件。从计算机用户的角度来说,计算机操作系统体现为其提供的各项服务;从程序员的角度来说,其主要是指用户登录的界面或者接口;如果从设计人员的角度来说,就是指各式各样模块和单元之间的联系。事实上,全新操作系统的设计和改良的关键工作就是对体系结构的设计,经过几十年以来的发展,计算机操作系统已经由一开始的简单控制循环体发展成为较为复杂的分布式操作系统,再加上计算机用户需求的愈发多样化,计算机操作系统已经成为既复杂而又庞大的计算机软件系统之一操作系统。原创 2023-03-29 16:31:30 · 348 阅读 · 0 评论 -
Linux——环境基础开发工具使用
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系.原创 2023-03-28 14:24:57 · 568 阅读 · 0 评论 -
Liunx——权限
目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这 个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。原创 2023-03-27 15:46:20 · 431 阅读 · 0 评论 -
Linux——基本指令
cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中。head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的 开头至标准输出中,而 tail 想当然尔就是看档案的结尾。touch再次创建同名的文件时,不会创建新的文件,而是更新文件的最近修改时间,更新为最新的时间。因为它的路径是唯一确定的,可知文件的任何一个孩子结点都只有一个父结点,反过来也是唯一的。原创 2023-03-23 11:56:02 · 1456 阅读 · 0 评论 -
Linux——前言
学习Linux系统编程,你可能要问Linux从哪里来?它是怎么发展的?在这里简要介绍Linux的发展史。要说 Linux,还得从UNIX说起。1968年,一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊 操作系统。Multics在多任务文件管理和用户连接中综合了许多新概念。1969-1970年,AT&T的贝尔实验室研究人员Ken Tompson和Dennis Ritchie,在采用很多Multics特点的基础 上开发了UINX系统。原创 2023-03-21 19:22:10 · 415 阅读 · 0 评论