操作系统
文章平均质量分 91
珠江上上上
选择自律,选择爱,追求成熟,同时就意味着和痛苦为伴,因为这是一条少有人走的路!
展开
-
【哈希】关于哈希的实现、冲突的解决、扩容等
哈希冲突指的是不同的键经过哈希函数计算后,产生了相同的哈希值,导致它们应该被存储在哈希表中的同一个桶中。由于哈希表的桶数量是有限的,当多个键被映射到同一个桶索引时,就发生了哈希冲突。哈希冲突是不可避免的,因为哈希函数将无限的键空间映射到有限的桶空间中。即使设计良好的哈希函数也无法完全避免冲突的发生,因为键空间远大于桶空间。哈希冲突会影响哈希表的性能和操作效率,特别是在发生冲突的桶中存储大量的键值对时,会导致链表或其他数据结构的长度增加,从而影响插入、删除和查找操作的效率。原创 2023-09-24 10:35:18 · 442 阅读 · 1 评论 -
【QandA C++】并发和并行、软链接、硬链接、用户态和内核态、异常和中断、信号和信号量等重点知识汇总
总之,信号和信号量是不同的概念,用于不同的目的。信号是一种进程间通信方式,用于通知事件的发生,而信号量是一种同步工具,用于控制对共享资源的访问。,防止他们获取别的程序的内存数据,或者获取外围设备的数据,并发送到网络,CPU划分出两个权限等级 – 用户态和内核态。cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。大家都知道,当我们在敲击键盘的同时就会产生中断,当硬盘读写完数据之后也会产生中断,所以,我们需要知道,所以,大家也需要记住的是,原创 2023-09-27 11:13:28 · 130 阅读 · 0 评论 -
【QandA C++】sort底层、vector、list、push_back/emplace_back、resize、reserve、迭代器失效、unordered_XXX对比map/set、红黑树
因为插入排序在面对“几近排序”的序列时,表现更好,而快排是通过递归实现的,会为了极小的子序列产生很多的递归调用在区间长度小的时候经常不如插入排序效率高)如果插入节点的父节点也是红色的,需要进行颜色调整和旋转操作,以满足红黑树的性质。,可以选择继承节点(通常是左子树中的最大节点或右子树中的最小节点)来替代要删除的节点,然后删除继承节点。左旋:将一个节点的右子节点提升为该节点的父节点,同时该节点成为左子节点。右旋:将一个节点的左子节点提升为该节点的父节点,同时该节点成为右子节点。原创 2023-09-24 10:31:16 · 197 阅读 · 0 评论 -
【QandA C++】内存分段和内存分页等重点知识汇总
每个进程都有 4GB 的虚拟地址空间,而显然对于大多数程序来说,其使用到的空间远未达到 4GB,因为会存在部分对应的页表项都是空的,根本没有分配,对于已分配的页表项,如果存在最近一定时间未访问的页表,在物理内存紧张的情况下,操作系统会将页面换出到硬盘,也就是说不会占用物理内存。在前面我们知道了,对于单页表的实现方式,在 32 位和页大小 4KB 的环境下,一个进程的页表需要装下 100 多万个「页表项」,并且每个页表项是占用 4 字节大小的,于是相当于每个页表需占用 4MB 大小的空间。原创 2023-09-27 11:09:56 · 195 阅读 · 0 评论 -
【QandA C++】进程、线程、协程、进程间通信的方式、线程同步机制、守护线程、僵尸进程、孤儿进程、线程切换的资源等重点知识汇总
创建一个进程实际上就是先将进程的代码和数据加载到内存上,接着操作系统对该进程进行描述形成对应的PCB(PCB是对进程控制块的统称),Linux下描述进程控制块的结构体叫做task_struct。Socket 实际上不仅用于不同的主机进程间通信,还可以用于本地主机进程间通信,可根据创建 Socket 的类型不同,分为三种常见的通信方式,一个是基于 TCP 协议的通信方式,一个是基于 UDP 协议的通信方式,一个是本地进程间通信方式。每个进程都有自己的内存空间,独立于其他进程,使其能够互相隔离。原创 2023-09-27 11:16:51 · 203 阅读 · 0 评论 -
【IO多路复用】IO机制、select、poll、epoll、边缘触发、水平触发等重点知识汇总
比较传统的方式是使用多进程/线程模型,每来一个客户端连接,就分配一个进程/线程,然后后续的读写都在对应的进程/线程,这种方式处理 100 个客户端没问题,但是当客户端增大到 10000 个时,10000 个进程/线程的调度、上下文切换以及它们占用的内存,都会成为瓶颈。最基础的 TCP 的 Socket 编程,它是阻塞 I/O 模型,基本上只能一对一通信,那为了服务更多的客户端,我们需要改进网络 I/O 模型。:应用程序在进行IO操作时,会立即返回,无论IO操作是否完成,应用程序都可以进行其他操作。原创 2023-09-27 11:26:25 · 250 阅读 · 0 评论 -
【锁】volatile、死锁、互斥锁、自旋锁、读写锁、乐观锁、悲观锁、常见的线程锁等重点知识汇总
线程 A 和 线程 B 获取资源的顺序要一样,当线程 A 是先尝试获取资源 1,然后尝试获取资源 2 的时候,线程 B 同样也是先尝试获取资源 1,然后尝试获取资源 2。也就是说,线程 A 和 线程 B 总是以。原创 2023-09-27 11:18:39 · 197 阅读 · 0 评论 -
【调度算法】进程调度算法、内存页面置换算法、LRU算法、LFU算法、磁盘调度算法等重点知识汇总
这种算法也叫做电梯算法,比如电梯保持按一个方向移动,直到在那个方向上没有请求为止,然后改变方向。磁头先响应左边的请求,直到到达最左端( 0 磁道)后,才开始反向移动,响应右边的请求。扫描调度算法性能较好,不会产生饥饿现象,但是存在这样的问题,中间部分的磁道会比较占便宜,中间部分相比其他部分响应的频率会比较多,也就是说每个磁道的响应频率存在差异。原创 2023-09-27 11:23:11 · 756 阅读 · 2 评论 -
【QandA C++】内存泄漏、进程地址空间、堆和栈、内存对齐、大小端和判断、虚拟内存等重点知识汇总
栈就像我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。栈空间和堆区的大小是由操作系统和编译器决定的,不同系统和编译器可能会有不同的默认值。,不是所有编译器都有默认对齐数,当编译器没有默认对齐数的时候,成员变量的大小就是该成员的对齐数。堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。,而数据的低位,保存在内存的低地址中;,而数据的高位,保存在内存的低地址中;原创 2023-09-26 11:02:09 · 234 阅读 · 6 评论 -
【操作系统】volatile、wait和notify以及“单例模式”基础知识
操作系统之volatile、wait、notify和单例模式基础知识点,很想对大家有帮助!原创 2022-10-14 16:34:24 · 1016 阅读 · 27 评论 -
【操作系统】线程安全相关问题总结
操作系统之线程安全问题专讲,很想对大家有帮助!原创 2022-10-09 18:23:24 · 543 阅读 · 6 评论 -
【操作系统】多线程基础知识
操作系统之多线程基础知识汇总,很想对你所帮助!喜欢就请三连支持吧,谢谢~原创 2022-10-08 18:20:22 · 3054 阅读 · 24 评论 -
【操作系统】进程和线程基础
操作系统之进程和线程的基础部分,很想对你有帮助!原创 2022-10-06 13:40:39 · 2030 阅读 · 29 评论