
Linux
文章平均质量分 91
学习Linux基础知识,由浅入深
~yY…s<#>
积土成山,积水成渊
展开
-
5种IO模型
Input(输入)和Output(输出)。冯诺依曼体系结构中,数据从输入设备拷贝到内存,经过处理后,再从内存拷贝到输出设备。现实情况中,数据并不是那么流畅的进行拷贝操作,而是会进行“等”。比如系统调用recv,当读取条件不满足时,它就会阻塞,当读取条件满足了,拷贝数据并返回结果。所以总结一下,recv一共就做了两件事:等+拷贝 => IO=等+拷贝其他系统调用也是一样,比如send,当发送缓冲区满了,就会阻塞,直到有空间腾出来,才能进行发送数据。原创 2025-01-11 23:11:28 · 782 阅读 · 0 评论 -
进程间关系与守护进程
作业是针对用户来讲,用户完成某项任务而启动的进程,一个作业既可以只包含一个进程,也可以包含多个进程,进程之间互相协作完成任务, 通常是一个进程管道。原创 2024-12-13 20:47:21 · 1013 阅读 · 5 评论 -
【Linux操作系统】线程的互斥与同步
总之就是两个人要竞争一把锁,如果拿苹果的人竞争性更强,每次都是他申请到锁,放苹果的人就没机会放苹果了,这也导致拿苹果的人每次申请到锁后去盘子上总是没有苹果拿,但是他又一直占用锁(每次申请到锁的都是他),所以放苹果的不能申请到锁放苹果,拿苹果的在盘子上也没有苹果拿,这就导致整个过程很不合理。又来了个线程2,此时线程1切换为线程2(注意:CPU执行线程1时是可以随时被切换的),线程1要带走寄存器中的1,然后线程2把0带入到寄存器中,再与内存的数据作交换,还是0,说明锁被其他线程占用,线程2就会挂起等待。原创 2024-09-06 14:25:55 · 960 阅读 · 9 评论 -
【Linux操作系统】线程控制
而线程也要到内存中读取,但是在CPU中,有一个硬件设备叫cache,作用是可以将当前读到的代码的周围其他代码和数据也一并交给CPU,这样下次遇到时,就可以直接在CPU处理了,效率提高了一些,工作也就少了。线程不一样是因为多个线程在一个进程内部,每个线程是一个进程的其中一个执行流,进程的所有资源(地址空间、页表、内存)都是可以给这些线程共享的,所以线程切换时,cache里面的上下文数据还在。线程分离了,但是资源依然是共享的,主线程先退出,那么整个进程就会结束,分离的线程也同样退出。原创 2024-09-05 08:42:44 · 1122 阅读 · 8 评论 -
【Linux操作系统】线程概念
对于进程,比较老的说法是加载到内存的程序叫做进程;修正后的说法是进程 = 内核数据结构 + 程序的代码和数据。对于线程,它是进程内部的一个执行分支,是CPU调度的基本单位。在地址空间的正文代码区,用户写的代码在进程中,都是串行执行的。换句话说,如果还有其他的进程(有多个进程),那么还需要开辟空间给新的进程创建地址空间和页表。这样就比较浪费时间和空间,即成本高。原创 2024-09-04 11:22:37 · 653 阅读 · 0 评论 -
【Linux操作系统】进程间通信(2)——共享内存
shmflg有3种,IPC_CREAT:如果共享内存不存在,就创建,如果已经存在,就获取它;使用共享内存,一定是一个进程创建共享内存,另一个进程获取。共享内存如果我们没有主动释放,它就会一直存在,因为共享内存是随系统的,除非重启系统,否则一直存在。ftok的参数由用户提供,通信的两个进程都是同样的pathname和proj_id,这样返回的key是相同的,使用的就是同一个共享内存了。进程A把它的数据在地址空间中通过页表映射到物理内存中,进程B通过页表获取物理内存的物理地址,得到数据。原创 2024-08-27 10:14:32 · 410 阅读 · 7 评论 -
【Linux操作系统】进程间通信(1)
既然有创建子进程,就是要子进程办事的,如果让子进程w,父进程r,那么,子进程写的通过缓冲区刷新到磁盘文件中(写的时候,文件要先被加载到内存,即缓冲区,),然后,父进程通过缓冲区读取文件的信息(也是在缓冲区,即内存中。五、管道只能单向通信。父进程最开始时的权限是rw,因为这样给子进程也是rw,然后关闭权限(父进程关闭w,子进程关闭r,注意,父进程刚开始不能只有一个r或w,因为不能新打开权限),一个读,一个写。也就是说它会有一块内存,但是与磁盘无关,它是一个内存级文件,没有名字,是匿名的,一般就叫它——管道。原创 2024-08-23 19:41:47 · 995 阅读 · 9 评论 -
【Linux操作系统】信号产生
2号信号是终止进程,用户可以让它的处理方式通过函数变成打印一句话和终止进程,终止进程的退出码为100,再把函数给系统调用接口signal。设置一个简单的闹钟,接口alarm,注意,闹钟设置的时间只是什么时候响,但是只响一次。2、信号到来时,如果此时有更重要的事情要处理,那么到来的信号要临时保存,即在合适的时候处理;4、信号的产生,是由别的进程产生的,当前的进程收到这个信号之前,在做其他的事情,是并发的。3、信号的产生是随时的,不能准确预料,所以信号是异步发送的;默认,就是按原来信号的处理方式进行处理。原创 2024-09-02 12:02:27 · 816 阅读 · 0 评论 -
【Linux操作系统】基础IO
目录一、接口使用1.1 铺垫知识1.2 C接口使用1.3 系统接口使用二、认识fd三、缓冲区四、文件系统五、软硬连接六、动静态库6.1 静态库的制作和使用6.1 动态库的制作和使用七、理解动态库加载一、接口使用1.1 铺垫知识文件=文件内容+文件属性 。一个文件如果它的文件内容为空,并不代表它没有占用内存,因为它的文件属性也是要占内存的,比如文件名、文件类型、文件权限等。访问文件前,文件必须被打开,必须加载到内存中。修改文件,都是通过执行代码的方式进行修改,也就是执行这个代码的程序运行起来。是进原创 2024-08-20 15:19:53 · 1037 阅读 · 9 评论 -
【Linux操作系统】进程控制
fork之后,子进程是被按照以父进程位模板创建的,所以地址空间和页表是以拷贝发方式给子进程,父子进程的虚拟地址是相同的,页表也是,在没有对一方进行写入的情况下,默认子进程的地址空间的虚拟地址通过页表指向的是前面父进程在物理内存中开辟的代码和数据,所以父进程和子进程共享代码。子进程被创建时它的页表指向的代码和数据和父进程是一样的(默认情况下),但是要进行程序替换,此时内存中发生写时拷贝,不仅数据拷贝了,代码也拷贝了,父进程还是原来的代码和数据不影响,子进程的代码和数据被其他程序替换了。可以使用echo $?原创 2024-08-20 09:00:25 · 815 阅读 · 8 评论 -
【Linux操作系统】进程概念
常见的说法中,有:加载到内存中的程序是进程或者正在运行的程序是进程。程序要先加载到内存中去,而且不一定只有一个程序,可以有多个程序加载到内存中。多个程序加载到内存中,那么操作系统要对它们进行管理,管理方式是:先描述,再组织。先描述:某一程序加载到内存中,操作系统首先是对它的属性信息进行描述,有:每个加载到内存中的程序都要有这样的描述,这个描述的结构体对象叫做PCB,process ctrl block进程控制块。所以PCB是什么?是描述进程的属性信息的结构体对象。为什么要有PCB?原创 2024-08-16 12:57:06 · 1237 阅读 · 7 评论 -
【Linux】make和Makefile
因为这3个时间里,相对而言访问的次数比修改更加频繁,即操作的时候我们一般都是查看文件较多,修改相对较少,所以系统就设定了一个规则,在短时间内查看文件它的Access时间不会发生改变,这么做其实也起到一个保护作用,因为前面说了,查看文件的操作的频次较高,如果系统频繁给Access时间调整,这样对系统来说比较“累”,所以这个Access时间在过了一定的时间段才发生改变。因为修改文件的内容,文件的大小也发生了变化,文件大小也是文件属性,即文件属性变化了,所以修改文件内容会连同文件属性一并修改。原创 2024-02-11 12:53:00 · 1297 阅读 · 19 评论 -
【Linux】Linux基础之权限
因为系统只识别拥有者是否有可读权限,也就是说,这个文件是yss创建的,同时目前的身份是yss,那么它就只看yss拥有者是否有可读的权限,只以第一次的识别为标准,后面的所属组是否有 r 它就不看了。很明显,这个文件的所处的目录是普通用户yss的,它的拥有者具有w写的权限,所以可以对它目录下的文件进行删除,不管那个文件是谁的。确实可以删除,可是回到最开始的问题,既然我(一个普通用户)创建的一个文件放在公共区域里,可以让别人读或者写,也有权利不让别人读或者写,但是防不住别人删了这个文件,该怎么办?原创 2024-01-07 20:19:27 · 3511 阅读 · 26 评论