os
文章平均质量分 73
s11show_163
这个作者很懒,什么都没留下…
展开
-
Linux下的线程安全
Linux下的线程安全原文结构有点乱线程安全:多个执行流对临界资源进行争抢访问,而不会造成数据二义性和逻辑混乱,成这段代码的过程是线程安全的。实现:保证多个执行流对临界资源进行争抢访问不造成数据二义性。同步与互斥:同步:通过条件判断,实现对灵界资源访问的时序合理性。互斥:通过唯一访问,实现对临界资源的安全性。一、互斥实现的技术:互斥锁原理:保证同一时间只有一个执行流对临界资源进行访问。即:对临界资源进行标记,无访问时标记为1,有访问时标记为0,当标记为1时,则用户可访问或线程原创 2021-03-16 23:36:05 · 116 阅读 · 0 评论 -
linux io多路复用 & select & poll & epoll
什么是多路复用IO多路复用适用以下场合select、poll、epoll之间的区别深度理解select、poll和epoll原创 2021-03-12 23:00:34 · 87 阅读 · 0 评论 -
无锁队列的实现原理
https://blog.csdn.net/loulanyue_/article/details/96371584原创 2021-03-04 23:59:43 · 144 阅读 · 1 评论 -
后台面试经典问题-手写LRU算法
LRU,Least Recently Used,最近最久未使用。常用于页面置换算法。是为虚拟页式存储管理服务的。对于在内存中又不用的数据块,称为LRU,操作系统会根据哪些数据属于LRU而将其移出内存。对于操作系统的内存管理,如何节省利用容量不大的内存为最多的进程提供资源,一直是研究的的热点。而内存的虚拟存储管理,是现在最通用最常见的方式–在内存有限的情况下,扩展一部分外存作为虚拟内存。虚拟页式存储管理,则是将进程所需空间划分为多个页面,内存中只存放当前所需页面,其余页面放入外存的管理方式。对于页面置换算原创 2021-02-24 20:13:50 · 118 阅读 · 0 评论 -
深入线程Thread类的start()方法和run()方法
摘自:https://cloud.tencent.com/developer/article/1136459一、初识java的线程是通过java.lang.Thread类来实现的。VM启动时会有一个由主方法所定义的线程。可以通过创建Thread的实例来创建新的线程。每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。.原创 2021-01-30 22:56:07 · 731 阅读 · 0 评论 -
孤儿进程 & 僵尸进程
摘自:https://www.cnblogs.com/anker/p/3271773.html1、前言之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程.原创 2021-01-30 20:15:07 · 142 阅读 · 0 评论 -
内存管理之3:分区存储交换技术 & 分页存储调度策略
交换技术是针对于分区式内存管理,将数据从主存->辅存,此时进程所需内存大于当前系统内存,那么该进程就不能在系统中运行页面调度策略是针对于分页式(段页式)内存管理,将数据从主存->辅存,此时如果一个进程所需内存大于当前系统内存,那么该进程仍然可以在系统中正常运行,因为该进程的一部分可以被还出到外存上。虚拟存储器系统通常定义三种策略来规定如如何(或何时)进行页面调度:调入策略、置页策略和置换策略。调页:何时(什么时候将一个页由外存调入内存中。),分为预调页和请求调页置页:何地(缺页中断时.原创 2021-01-30 19:18:32 · 862 阅读 · 0 评论 -
进程间通信之套接字 & 管道 & FIFO
一、管道(pipe)1、管道的定义和特点管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称为半双工管道。管道的这一特点决定了器使用的局限性。管道是Linux支持的最初Unix IPC形式之一,具有以下特点:数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,需要建 立两个管道;管道只能用于父子进程或者兄弟进程间通信。,也就是说管道只能用于具有亲缘关系的进程间通信。2、管道的命令command1 | command2 | command3原创 2021-01-29 00:08:37 · 448 阅读 · 0 评论 -
虚拟内存造成的连续地址空间假象被戳破怎么办
摘自:https://blog.csdn.net/qq_40861091/article/details/102601719很多初学者在这里会有一个疑问,既然给程序造成连续的空间假象,那要是内存中确实没内存可用了,会怎么办呢?那么对于*新的页数,他就会发生缺页中断,然后会覆盖起其他的页缺页中断大概有三种算法:1.(OPT)最晚不使用的算法:表示新的页如果进来没内存框可放了,会替换之后 几乎或者根本不会用到的页。但这种算法只是一种理想算法,因为没人能预估之后的事,包括计算机2.(FIFO)先进先出算法原创 2021-01-28 23:07:38 · 147 阅读 · 0 评论 -
操作系统——CPU调度
对于单处理器系统,每次只允许一个进程运行,任何其他进程必须等待,直到CPU空闲能被调度为止,多道程序的目的是在任何时候都有某些进程在运行,以使CPU使用率最大化。CPU-I/O区间周期CPU的成功调度依赖于进程的如下属性:进程执行由CPU 执行和I/O等待周期。进程在这两个状态之间切换,进程执行从 CPU 区间开始,在这之后是 I/O 区间,接着是另一个 CPU 区间,然后是另一个I/O区间,如此进行下去,最终,最后的CPU 区间通过系统请求终止执行。CPU调度程序每当CPU空闲时,操作系统就必须原创 2021-01-28 21:28:37 · 573 阅读 · 0 评论 -
C++ 线程安全的单例模式总结
1. 什么是线程安全?在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。2. 如何保证线程安全?给共享的资源加把锁,保证每个资源变量每时每刻至多被一个线程占用。让线程也拥有资源,不用去共享进程中的资源。如: 使用threadlocal可以为每个线程的维护一个私有的本地变量。3. 什么是单例模式?单例模式指在整个系统生命周期里,保证一个类只能产生一个实例,确保该类的唯一性。3.1. 单例模式分类单例模式可以分为原创 2021-01-21 21:19:22 · 854 阅读 · 3 评论 -
进程栈和线程栈的区别&线程的共享资源和私有资源&线程的工作内存里存放什么&为什么每个线程都需要创建一个栈?
线程共享的环境包括:进程代码段进程的公有数据(全局变量,函数里的静态变量)进程打开的文件描述符信号的处理器进程的当前目录和进程用户ID与进程组ID。进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括:线程ID每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标识线程。寄存器组的值由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保原创 2021-01-21 10:42:16 · 1873 阅读 · 1 评论 -
函数调用过程中函数栈详解
当进程被加载到内存时,会被分成很多段代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写,如果发生写操作则会提示segmentation fault数据段:保存初始化的全局变量和静态变量,可读可写不可执行BSS:未初始化的全局变量和静态变量堆(Heap):动态分配内存,向地址增大的方向增长,可读可写可执行栈(Stack):存放局部变量,函数参数,当前状态,函数调用信息等,向地址减小的方向增长,可读可写可执行环境/参数段(environment/argumentssection).原创 2021-01-21 09:48:32 · 606 阅读 · 0 评论 -
操作系统用户态和内核态之间的切换过程
一、进程内核栈、用户栈1.进程的堆栈????task_struct和内核栈的位置,以及为什么放在一起,详见https://developer.aliyun.com/article/369052内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存 在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内 容是内核栈空间地原创 2021-01-20 22:40:44 · 1800 阅读 · 0 评论 -
进程/线程/协程/多进程/多线程应用场景/线程切换/进程切换/内核栈和用户栈切换/线程的工作内存
为什么会有线程?在网络或多用户换机下,一个服务器通常需要接收大量不确定数量用户的并发请求,为每一个请求都创建一个进程显然行不通(系统开销大响应用户请求效率低),因此操作系统中线程概念被引进。进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。一个程序至少一个进程,一个进程至少一个线程。进程线程的区别:地址空间:同一进程的线程共享本进程的地址原创 2021-01-20 17:37:52 · 490 阅读 · 0 评论 -
内存管理 - 内存页面置换算法
内存&主存&外存&辅存内存又称主存,是CPU能直接寻址访问的存储空间。在计算机工作的时候,所有的数据都要先经过内存,然后才能交由处理器去处理,内存也被称为,CPU与外存通信的桥梁。它的特点是读写速度快。内存一般是由半导体器件组成,可分为RAM(随机存储器)、ROM(只读存储器)、Cache(高速缓存)。外存又称为辅存,是指除计算机内存及CPU缓存以外的存储器,此类存储器断电后仍能保存数据。常见的外存有硬盘、光盘、U盘等。...原创 2021-01-15 23:20:29 · 871 阅读 · 0 评论 -
面经 - 3 - 操作系统/并发/多进程多线程
1. 多线程中会对全局变量进行 pad操作2. Fork之后的父子进程的虚拟内存空间的相同与不同fork之后父子进程的内存关系fork之后父子进程的内存关系fork后子进程与父进程的内存关系十辨十析之辨一――fork()、写时复制、vfork()Linux中fork,vfork和clone详解(区别与联系)一个线程是如何被挂起的? 一个进程是如何被挂起的?线程和进程的状态以及挂起的原因线程的挂起、线程挂起的代码以及等待和锁实现资源竞争进程挂起PV操作是怎么实现的?就看这原创 2021-01-16 15:50:58 · 178 阅读 · 0 评论