操作系统
文章平均质量分 64
暮色_年华
这个作者很懒,什么都没留下…
展开
-
嵌入式C语言的自我修养:内存泄漏与防范
如fast bins,主要用来保存用户释放的小于80 Bytes(M_MXFAST)的内存,在提高内存分配效率的同时,带来了大量的内存碎片。如果指针在遍历链表时已经指向链表的末尾或头部,指针已经指向NULL了,此时再通过该指针去访问节点的成员,就相当于访问零地址了,也会发生一个段错误,这个指针也就变成了非法指针。内存管理子系统将一个进程的虚拟空间划分为不同的区域,如代码段、数据段、BSS段、堆、栈、mmap映射区域、内核空间等,每个区域都有不同的读、写、执行权限。原创 2024-09-25 21:48:17 · 1010 阅读 · 0 评论 -
xv6讲解(2) Operating system organization
这一章 讲操作系统是如何实现进程并发、进程隔离和进程交互(multiplexing isolation and interaction)操作系统需要同时支持多个进程。如一个进程可以使用fork来启动新的进程。对计算机的资源进行时间共享,确保所有进程都有机会执行。操作系统需要为进程之间提供隔离,如果一个进程有错误并且出现故障,它不应影响不依赖于有错误进程的其他进程。进程之间应可以进行交互(通信):如管道....。原创 2024-09-23 22:34:20 · 793 阅读 · 0 评论 -
WSL2 使用usbipd工具 连接USB设备
usbipd list 可以查看连接到win上的设备。把USB设备从win转移到WSL需要执行下面两个指令。使用开源工具usbipd,可以让usb设备连接WSL。原创 2024-08-13 23:02:28 · 515 阅读 · 0 评论 -
进程通信(7):互斥锁(mutex)和条件变量
/在条件变量上等待,线程进入阻塞状态,直到有其他线程把它唤醒。// 获取锁,如果获取不到锁,线程进入阻塞状态,释放CPU。条件变量可以让获取互斥锁 的线程在某个条件变量上等待,直到有其他线程把他唤醒。//非阻塞 获取锁,如果获取不到,就返回错误码。//唤醒等待在cond的所有线程。互斥锁(mutex)用于互斥访问临界区,只允许一个线程访问共享变量。//唤醒等待在cond的某个线程。原创 2024-08-03 22:32:17 · 466 阅读 · 0 评论 -
进程通信(6):POSIX信号量
定义两个线程,一个是生产者,一个是消费者,初始化信号量(这里使用的是有名信号量,根据一个路径字符串初始化信号量的值。也可以使用sem_init和sem_destory创建基于内存的信号量),mutex初始化为1,nempty初始化为NBUFF,nstored为0。初始化多个生产者线程和一个消费者线程,然后初始化3个信号量(这里用到的是基于内存的信号量),同(1)。nitems是要存取的个数,buff表示缓冲区,nput 和 nputval 表示已经存放的个数和下一个存放的值,三个信号量作用和(1)相同。原创 2024-08-03 18:42:34 · 440 阅读 · 0 评论 -
linux内核:文件系统的组织(超级块,索引节点,目录项,文件对象)
文件1和文件2指向同一个inode,使用ls -i 可以为一个文件建立硬链接后,inode号相同,内容也是相同的,操作的是同一个文件。文件目录树的路径的一个组成部分。方便查找文件设立的,一个路径的各个组成部分不管是文件还是目录都是一个目录项对象。为一个文件建立硬链接的就是为这个文件对应的inode节点建立一个新的目录项指向这个inode。文件对象和物理文件是对应的,表示进程和文件的对应。多个进程可以打开同一个文件,所以同一个文件可以对应多个文件对象。存放具体文件的信息,代表实际一个文件。原创 2024-08-01 20:09:19 · 283 阅读 · 0 评论 -
Linux内核:哈希表hlist_head和hlist_node
结构体有hlist_head和hlist_node,hlist指向hlist_node。linux内核中哈希表使用链接法实现哈希表,为什么要使用二级指针?原创 2024-08-01 17:52:02 · 163 阅读 · 0 评论 -
进程通信(4):System V消息队列
内核中的System V消息队列。原创 2024-07-17 23:54:07 · 137 阅读 · 0 评论 -
进程通信(2):命名管道FIFO
在服务器端使用的公共的fifo命名管道(路径名被所有客户端知道),每个客户端创建自己的fifo文件,然后以只写的方式打开服务器的fifo文件,向fifo写自己的fifo路径名和要打开的文件名。(3)写操作的阻塞特性:FIFO的写操作是阻塞的(如果没有设置为非阻塞模式),这意味着如果没有读进程在另一端等待接收数据,写进程将被阻塞,直到有读进程出现。(2)大于PIPE_BUF的写操作:如果写入的数据量超过了PIPE_BUF的大小,那么写操作将可能被分割,也就是说,写操作可能不是原子的。原创 2024-07-15 23:22:36 · 978 阅读 · 0 评论 -
进程通信(1):无名管道(pipe)
首先父进程使用pipe创建两个管道pipe1和pipe2,然后使用fork创建子进程,在子进程中关闭pipe1的写端和pipe2的读端。因为父进程调用fork函数创建子进程,子进程拷贝父进程的文件表,由于父子进程文件表内容相同,指向的file相同,所有最终父子进程操作的pipe管道相同。(1)创建管道1(fdl[0]和fdl[1])和管道2(fd2[0]和fd2[1]);如果需要双向数据流,需要创建两个管道,然后关闭一个管道的读端和另一个管道的写端。(3)父进程关闭管道1的读出端(fd[0]);原创 2024-07-14 18:07:05 · 349 阅读 · 0 评论 -
linux内核中创建进程和线程做了什么工作?
但是线程由于共享了内存空间和其他一些资源,所以线程上下文切换的开销省去了复制父进程内存空间和其他一些资源的开销,所以使用线程可以有更高的并发度。从上面可以看到在创建线程时,有一个标志时表示创建的是线程,然后创建的线程和父进程共享虚拟内存空间,文件描述符,但是每个线程都有自己一个栈和TLS块,在线程初始化的时候设置栈指针、栈大小和TLS地址。stack_size=0x7fff00: 这个值通常表示栈大小,但在这个上下文中,它看起来像是一个无效的值(可能是输出解析的问题),因为栈大小应该是字节的数量。原创 2024-07-12 11:36:05 · 348 阅读 · 0 评论 -
操作系统:进程的状态
终止态:指进程完成任务到达正常结束点,或出现无法克服的错误而异常终止,或被操作系统及有终止权的进程所终止时所处的状态。当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行,进程这时的状态称为就绪状态。创建一个进程需要通过两个步骤:1.为新进程分配所需要的资源和建立必要的管理信息,设置该进程为就绪态,并等待被调度执行。当系统资源尤其是内存资源已经不能满足进程运行的要求时,必须把某些进程挂起(suspend),对换到磁盘对换区中,释放它占有的某些资源,暂时不参与低级调度。原创 2024-06-08 12:10:12 · 291 阅读 · 0 评论 -
unix环境编程:标准I/O库
继续学习《unix环境编程》。第五章 讲标准I/O库。1 引言标准I/O库提供一组通用、跨平台的输入/输出函数,确保了代码的可移植性。(1)缓存管理:标准I/O库管理读写缓冲区,减少了直接系统调用的次数。当使用fgetc从文件读取单个字符时,可能一次性从磁盘读取多个字符到缓冲区,下次读取时直接从缓冲区获取,减少了昂贵的磁盘I/O操作。(2)格式化输入输出:提供了格式化读写函数,如printf、scanf,使得数据的输入输出更加灵活和方便。原创 2024-05-09 16:51:27 · 734 阅读 · 0 评论 -
操作系统:文件系统
如a/b/f,c/d/f,f文件同时存在两个目录下,f文件有多个路径名,两个目录项都指向f的inode节点。目录项可以表示一个目录或文件,一个路径如/a/b/c,a,b,c在内核中都有一个目录项,a、b是目录所以会有一个子目录链表,c是文件所以没有这个子目录链表。访问软链接,系统会解析路径名,删除软链接只影响链接本身,不会影响目标文件。当用户访问一个路径(a/b/c),操作系统实际上是通过沿着路径中的目录逐层查找对应的目录项,获取到目标文件或目录的Inode指针,通过访问inode结点访问文件的数据。原创 2023-08-27 22:03:10 · 64 阅读 · 0 评论 -
操作系统:磁盘交换空间
当系统的物理内存不足以存储当前所有活动进程所需的数据时,操作系统会将一部分暂时不用或使用较少的内存数据转移到磁盘的交换空间上,以此来释放物理内存供更活跃的进程使用。虽然使用磁盘作为额外的内存可以扩大系统可以同时处理的数据量,但由于磁盘的访问速度远低于RAM,频繁的交换操作会导致系统性能下降,响应变慢,这也就是为什么物理内存不足时系统会变得迟钝的原因。:磁盘上还需要保留一部分空间来存储文件系统的元数据,如文件的名称、大小、创建修改时间、权限信息等,以及文件系统的内部结构,如inode表(在某些文件系统中)。原创 2024-04-28 16:33:10 · 583 阅读 · 0 评论 -
UNIX环境编程:文件I/O
★内容概述: 本章主要讲了文件I/O,即不带缓冲的I/O,然后介绍了不带缓冲I/O函数随后介绍了文件共享实现方式,主要是使用3种数据结构实现(进程表项,文件表项,v-node和i-node)。然后从文件共享提出了一个问题,就是多个进程同时操作文件可能产生的数据一致性问题,由此又介绍了两个原子操作(pread和pwrite)。最后介绍了常用的I/O控制函数。原创 2024-04-15 13:11:09 · 842 阅读 · 0 评论 -
linux进程通信:信号
信号(软中断信号 signal)是一种更高层的软件形式的异常,它允许进程和内核中断其他进程。一个信号就是一条小消息,它通知进程 系统中发生一个某种类型的事件。每种信号对应某种系统事件,低层的硬件异常是由内核异常处理程序处理的,正常情况下,对用户进程而言是不可见的,信号提供一种机制,通知用户进程发生了异常。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以传递附加信息。原创 2024-03-31 10:56:19 · 858 阅读 · 0 评论 -
操作系统:fork函数
当fork函数被当前进程调用时,内核为新进程创建各种数据结构,并分配给它一个唯一的PID,为了给这个新进程创建虚拟内存,它创建了当前进程的mm_struct、区域结构和页表的原样副本,它将两个进程的每个页面都标记为只读,并将两个进程中的每个区域结构都标记为私有的写时复制。当fork在新进程返回时,新进程现在的虚拟内存刚好与调用fork时存在的虚拟内存相同,当两个进程中的任意一个后来进行写操作时,写时复制就会创建新页面,因此,也就为每个进程保持了私有地址空间。如果使用了fork,就产生了另一个进程。原创 2024-03-30 17:37:05 · 476 阅读 · 0 评论 -
【操作系统】存储器管理:对换
进程换入换出原创 2022-11-03 00:00:15 · 786 阅读 · 0 评论 -
【操作系统】死锁概述
死锁概述原创 2022-10-17 20:20:54 · 694 阅读 · 0 评论 -
【微机接口】功能调用、分支、循环
汇编原创 2022-10-12 23:21:57 · 1038 阅读 · 1 评论 -
【操作系统】实时调度
实时调度原创 2022-10-09 20:31:26 · 3690 阅读 · 1 评论 -
【操作系统】处理机调度:作业与作业调度
作业调度原创 2022-10-09 09:48:18 · 948 阅读 · 0 评论 -
【操作系统】处理机调度:处理机调度的层次和调度算法的目标
处理机调度层次和目标原创 2022-10-08 21:10:37 · 1232 阅读 · 0 评论 -
【操作系统】线程
线程原创 2022-10-06 19:12:10 · 737 阅读 · 0 评论 -
【操作系统】进程:进程通信
进程通信原创 2022-10-05 21:17:58 · 1380 阅读 · 0 评论 -
【操作系统】内核支持线程和用户级线程
进程和线程原创 2022-10-01 10:15:40 · 1389 阅读 · 2 评论 -
【操作系统】进程和线程比较
进程和线程原创 2022-10-01 09:47:03 · 314 阅读 · 0 评论 -
【操作系统】进程同步:苹果橘子问题
苹果橘子问题原创 2022-09-30 15:37:57 · 1993 阅读 · 0 评论 -
【操作系统】进程:哲学家进餐问题
哲学家进餐问题原创 2022-09-30 14:54:12 · 1221 阅读 · 1 评论 -
【操作系统】进程:生成者-消费者问题
生产者消费者问题原创 2022-09-30 11:49:52 · 434 阅读 · 0 评论 -
【操作系统笔记】中断系统
程序中断:执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。工作流程:1.中断请求:中断源向CPU发送中断请求信号。中断请求标记:每个中断源向CPU发出中断请求的时间是随机的。为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR,当其状态为“1”时,表示中断源有请求。这些触发器可...原创 2022-04-04 11:24:40 · 5156 阅读 · 0 评论 -
【王道操作系统笔记】进程控制
进程控制定义:对系统中所有进程实施有效的管理,它具有创建新进程、撤销已有进程,实现进程状态转换等功能进程控制实现:修改队列和PCB内容:为了防止再修改队列时没有修改PCB导致状态不一致,用原语实现进程控制。原语:执行期间不允许中断。原语采用”关中断指令“和“开中断指令”实现。原子操作:不可被中断的操作执行关中断指令后,如果外部中断信号进入,会被忽略。执行开中断指令后,接受外部中断信号,会转入中断处理程序。原语 (开/关中断指令)权限很大,只能运...原创 2022-03-19 23:12:23 · 328 阅读 · 0 评论 -
【王道操作系统笔记】系统调用
什么是系统调用?系统调用时操作系统提供给应用程序(编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。有何作用?系统中的共享资源都由操作系统统一掌管。操作系统提供系统调用的功能,用户进程想要使用系统资源的操作(如储存分配,IO操作,文件管理等),只能通过系统调用向操作系统发出请求。操作系统会对各个请求进行协调管理。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。系统调用分类:设备管理:完成设备的请...原创 2022-03-18 13:11:40 · 231 阅读 · 0 评论 -
【操作系统笔记】中断和异常
中断机制的诞生:早期的计算机,各程序只能串行执行,系统资源利用率低。为了解决上述问题,人们发明了操作系统,引入中断机制,实现了多道程序并发执行本质:发生中断意味着操作系统介入,开展管理工作。由于操作系统的管理工作(比如进程切换,分配I/O设备等)需要使用特权指令,因此CPU要从用户态转为核心态。中断可以使CPU从用户态切换为核心态(唯一途径),使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行。*核心态到用户态的切换是通过执行一个特权指令,将程序状态字(PSW...原创 2022-03-18 09:38:11 · 1665 阅读 · 0 评论 -
【王道操作系统笔记】操作系统的运行机制和体系结构
指令:CPU能够识别和执行的最基本的命令(加减乘除,内存)特权指令:不允许用户程序使用,如内存清理指令非特权指令:如运算指令CPU如何判断当前是否可以执行特权指令?两种处理器状态:用户态(目态):此时CPU只能执行非特权指令核心态(管态):特权指令,非特权指令都可以执行当程序状态字寄存器(PSW)中的某标志位来标识当前处理器处于什么状态。如0为用户态,1为核心态。两种程序:内核程序:操作系统的内核程序是系统的管理者,既可以执行特权指令。也可以执行非特权指令,运行在核心..原创 2022-03-17 10:32:32 · 130 阅读 · 0 评论 -
【王道操作系统笔记】操作系统的发展和分类
重点理解各阶段的优点和缺点。各阶段的主要优点都是解决了上一阶段的主要缺点。手工操作系统:主要缺点:用户独占全机,人机速度矛盾导致资源利用率极低。批处理阶段:单道批处理系统引入脱机输入/输出的技术(用磁带完成),并监督程序负责控制作业的输入,输出主要优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升。主要缺点:内存中仅有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量的时间是在空闲等待I/O完成。资源利用率依然很低。多道批处理系统...原创 2022-03-16 09:17:57 · 180 阅读 · 0 评论 -
【王道操作系统笔记】操作系统的四个特征
并发指两个或多个事件在同一时间间隔发生。这些事件宏观上是同时发生的,微观上是交替发生的。区别并行:并行指两个或多个事件同一时刻同时发生操作系统的并发性:计算机系统同时存在着多个运行着的程序一个单核处理机(CPU)同一时刻只能执行一个程序,因此操作系统会负责协调多个程序交替执行当今的计算机,一般都是多核CPU,如果是4核CPU意味着同一时刻可以有4个程序并行执行,但是操作系统的并发性必不可少共享资源共享,指系统中的资源可供内存中多个并发执行的进程共同使用。互斥共享方式...原创 2022-03-15 16:26:35 · 645 阅读 · 0 评论 -
【王道操作系统笔记】操作系统的概念,功能和目标
操作系统概念:控制和管理整个计算机系统的硬件和软件资源,并合理组织调度计算机工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。计算机系统 的层次结构:操作系统的功能和目标:(1)作为系统资源的管理者:安全高效*内存管理(程序放在内存的什么位置)*处理机管理(对应的进程被处理机(CPU)处理)*文件管理(程序的位置)*设备管理(IO设备)(2)作为用户和计算机硬件之间的接口*命令接口:允许用户直接使用...原创 2022-03-14 22:13:17 · 1266 阅读 · 0 评论