小白日记之操作系统
窗边鸟
希望能不断前进
展开
-
小白日记:进程同步之Unix域套接字
域套接字是一个非常高级的进程间通信的方法。Unix域套接字可以用于同一机器进程间通信。套接字(socket)本来是网络通信中的术语。Unix系统提供的域套接字提供了网络套接字类似的功能。使用流程服务端:创建套接字,绑定套接字,监听套接字,接收&处理信息客户端:创建套接字,连接套接字,发送信息优缺点提供了单机简单可靠地进程通信同步服务只能在单机使用,不能跨机器使用。...原创 2021-01-16 21:16:25 · 120 阅读 · 0 评论 -
小白日记:进程同步之共享内存
线程本身不具备资源,只能共享进程的资源,进程们共享计算机的资源。在某种程度上,多进程是共同使用物理内存的。由于操作系统的进程管理,进程间的内存是独立的,这样就确保了每一个进程运行时的安全性。进程默认是无法访问进程空间之外的内存的。而共享内存允许不相关的进程访问同一片物理内存,原理就是将物理内存放到各个进程的页表中去,让那些进程通过页表去访问共享内存。共享内存允许两个毫不相关的进程访问同一片物理内存,共享内存是进程之间共享和传递数据最快的方法。共享内存有一个问题:就是他本身没有提供同步机制,需要借原创 2021-01-15 22:54:20 · 161 阅读 · 2 评论 -
小白日记:使用fork系统调用创建进程
fork函数是属于c语言的,在java和python中,创建进程时的底层实现也是用的fork函数。fork函数创建的新进程初始化状态和父进程是一样的,就像是复制的一样。fork函数的调用是不需要参数的。无论形参还是实参。fork函数的调用会返回两次,分别返回子进程id和0。在这两次返回中,返回ID的是父进程,也就是fork函数,而这个ID也就是子进程的ID。返回0的就是子进程,如果返回的值小于0,那么进程就没有创建成功。...原创 2021-01-14 20:40:00 · 224 阅读 · 0 评论 -
小白日记:线程同步之条件变量
条件变量是一种相对复杂的线程同步的方法条件变量允许线程在资源不足时,进入睡眠状态,直到所有资源都齐备的情况下再将线程唤醒。前面的生产者消费者故事,是有漏洞的,是因为前面的故事没有考虑到缓冲区小于零,消费者必须等待生产者生产出产品的情况。以及缓冲区已经满了的时候,生产者必须等待缓冲区有一个空位的情况再生产。这个时候我们就面临了一个问题:怎样在生产者生产了一个产品,或消费者消费了一个产品的时候,唤醒可能正在等待的生产者或消费者。条件变量需要配合互斥量来使用。他和读写锁一样,加锁和解锁也是用两个语句来原创 2021-01-12 22:39:14 · 75 阅读 · 0 评论 -
小白日记:线程同步之读写锁
读写锁之所以出现是因为在我们的实际开发中会遇到这一种我们一般不会去改变的临界资源,一般这种临界资源就是多读少写。我们在读取的时候不会改变临界资源中的值,对于这样一种资源,我们要是每次都给他进行加锁的话,那么效率会很低。读写锁是一种特殊的自旋锁读写锁会允许多个线程同时访问资源以提高读取数据的性能。读写锁允许多个线程同时进行读操作,但是不允许多个进程同时进行写操作,对于多个线程同时进行写操作读写锁是不允许的。并且在有程序进行读操作的时候,也是不允许其他线程进行写操作的。读写锁在加锁的时候,有两种锁,一种原创 2021-01-10 15:47:56 · 191 阅读 · 0 评论 -
小白日记: 线程同步之自旋锁
自旋锁的原理与互斥锁是一样的。自旋锁也是一个使得多线程同步的变量,他会反复检查锁变量是否可用,就是检查这个线程所想使用的资源可不可用。不可用就会一直等待并且一直不停的检查,就像是在一直不停的申请一样。而且自旋锁会使那个等待的线程一直占用着cpu不放。是一种忙等待状态。使用自旋锁可以避免进程或线程上下文切换的开销,就是避免了线程在等待的时候将cpu释放,将上下文数据存储,又使得一个新的线程获得cpu资源,从而需要将这个获得了cpu资源的新线程的上下文信息载入。就是避免了这种在只需很短的时间等待的情况下瞎折原创 2021-01-07 11:22:37 · 129 阅读 · 0 评论 -
小白日记:线程同步之互斥量
互斥量是为了保证,在一个线程使用临界资源时,其他线程无法使用那个已经被占用的临界资源。阻止其他线程对正在被使用的临界资源的访问是他的工作原理。互斥量可以防止两个线程的指令交叉执行,可以很好的对线程的指令进行控制,就相当于是将哪个线程先执行哪个线程后执行理顺了,保证先后线程的的执行顺序。原子性指的是一系列的操作不可被中断的特性,也就是说就是一个线程中的指令要不全部没有被执行,要不就全部执行完了,所有线程的行动都是一致的。不存在部分指令执行,然后就去执行其他指令了,上一个线程执行一半就不管了。互斥锁是最简原创 2021-01-06 19:00:19 · 76 阅读 · 0 评论 -
小白日记: 操作系统的设备管理
广义的IO设备对cpu而言,凡是对cpu进行数据输入的都是输入设备。对cpu而言,凡是对cpu进行数据输出的都是输出设备。按照使用特性进行分类存储设备:U盘,内存,磁盘交互IO设备:键盘,鼠标,显示器按信息交换的单位进行分类块设备:磁盘,SD卡字符设备:打印机,shell终端按设备的共享属性进行分类:独占设备,共享设备,虚拟设备按照传输速率进行分类:低速设备,中速设备,高速设备IO设备的缓冲区缓冲区可以减少cpu处理IO设备请求的频率,还可以提高cpu与IO设备之间的并行性。专用缓原创 2021-01-04 23:24:01 · 117 阅读 · 0 评论 -
小白日记: 操作系统之linux的文件系统
FAT使用一张表来保存盘块的信息。NTFS他是WindowsNT环境的系统文件。他对FAT进行了改进,取代了旧的文件系统。EXT(extended file system):扩展文件系统他是linux的文件系统,window不能识别他。EXT文件系统分为两个区域,第一个是启动扇区,用于安装开机管理程序。第二个部分是链组,用于存储数据。链组里面有一个区域叫Inode,每一个文件都有Inode,这是每一个文件的索引节点。Inode包含文件类型,文件权限,文件物理地址,文件长度,文件连接计数,等文原创 2020-12-28 11:33:20 · 110 阅读 · 0 评论 -
小白日记:操作系统之linux文件的基本操作
1. linux目录在根目录下,有许多重要的目录。比如:bin目录是存放可执行的二进制文件的,etc存放的是配置文件,home目录是用户文件的根目录,是用户的主目录,dev是设备文件。绝对路径:绝对路径就是就是从根目录开始到我们的目标文件的路径相对路径:相对路径就是从上一个文件夹到目标文件就算,是不固定的。2. linux文件类型普通文件(-)目录文件(d)符号链接(I)设备文件(b)(块设备)设备文件(c)(字符设备)FIFO(p)套接字(s)...原创 2020-12-25 22:06:43 · 112 阅读 · 0 评论 -
小白日记:操作系统的文件管理
文件的逻辑结构文件可以按照逻辑结构分为两种类型:有结构文件与无结构文件有结构文件:文本文件,文档(ppt, excle等),多媒体文件(图片视频等),直白来讲就是人类可以阅读的。文件内容由定长记录和可变长记录组成,定长记录就是用于存储文件格式,文件描述等固定的数据项。可变长记录用于存储文件的具体内容。无结构文件:二进制文件,链接库,直白来讲就是人类看不懂的。无结构文件也称为流式文件,文件的内容以字节为单位,比如exe文件以及dll文件,so文件。顺序文件顺序文件指得就是按顺序存放在存储介质中的原创 2020-12-17 23:29:29 · 136 阅读 · 0 评论 -
小白日记:操作系统之linux的存储管理
Buddy内存管理算法此算法是基于计算机处理二进制的优势之上的,使得这个算法具有极高的效率。这个算法主要是为了解决内存外碎片的问题的。页内碎片我们前面已经提到了,就是已经被分配出去的内存空间大于我们存储那个进程所需的空间,这样就会导致我们用来放这个进程的空间有所盈余,而这个盈余如果不能再次被利用的话,这个剩余的空间就叫内部碎片。外部碎片是指还没有被分配出去但是他的大小与申请分配内存的进程不符合,因此无法分配给申请内存空间的新内存。这就是页外碎片,有没有被分配,是一个重要的判断条件。这个算法的核心就是原创 2020-12-09 22:28:14 · 103 阅读 · 0 评论 -
小白日记:存储管理之虚拟内存
虚拟内存概述他会把程序使用的内存进行划分,将部分暂时不使用的内存放置在辅存当中。程序的局部性原理是指cpu访问存储器时,无论是存取指令还是存取数据,访问的所有存储单元都聚集于一个较小的连续区域中。因为有这个原理,所以在程序运行时,程序无需全部装载在内存中,如果内存中没有要访问的部分,那么就从辅存中调换。虚拟内存是对物理内存的补充,速度接近于内存,成本接近于辅存。虚拟内存中的算法先进先出算法(FIFO)最不经常使用算法(LFU)最近最少使用算法(LRU)在主存缺少我们所需的页面时,就需要从原创 2020-12-07 23:01:24 · 90 阅读 · 0 评论 -
小白日记:操作系统之存储管理的段页式存储管理
也就是操作系统是如何管理进程的空间的。页式存储管理物理设备(内存条)中的一部分内存就用字,字块来定义,每一个字块的大小相同。逻辑空间中的内存的一部分就用页面来定义,每一个页面的大小也相同。而在我们将进程的逻辑空间等分成若干个大小一样的页面的时候,则相应的我们也将物理内存空间等分为了若干个物理块。然后我们以页面为单位,将进程的内存装入物理内存中分散的物理块中。我们在使用页式存储管理时,应该将页分配的大小适中,太大不好分,太小会造成内存碎片过多。通常是512B到8K。我们可用通过页表来了解我们的进程原创 2020-09-30 21:57:22 · 275 阅读 · 0 评论 -
小白日记:存储管理之内存分配与回收
存储管理的三个目的 确保计算机有足够的内存来处理数据。 确保计算机可以在所有内存中拿来一部分内存使用。 确保程序可以归还使用完了的内存,让其他程序接着用。内存分配地方法 单一连续分配:这是最简单的内存分配方式,他只能在单用户,单进程的操作系统中使用。把内存分为系统区和用户区,系统区给系统,用户区给用户使用这种分配方式已过时。 固定分区分配方法:固定分区方法是支持多道程序的最简单的方法,就是将内存分为若干个固定大小的区域,每个分区只给一个程序使用,所有程序互不干扰。..原创 2020-09-15 23:13:47 · 310 阅读 · 0 评论 -
小白日记:作业管理之死锁
概念 死锁是指两个或两个以上的进程在执行中,因为对于资源的争夺或者由于互相通信有问题的原因。陷入了一种在没有外力介入的情况下一直互相遏制到地老天荒的情况。 就如同前面的文章中举的哲学家的例子,所有的哲学家都不愿意放下手中的筷子给别人用,所以大家只能一起饿死。就像两头倔牛撞在了一起一样,谁也不肯退后一步。死锁的产生 进程之间互相竞争资源:举一个例子,A进程已经控制了传真机,B进程已经控制了打印机,A进程等待打印机的资源被释放,B进程等待传真机的资源被释放。都在等待..原创 2020-09-04 13:02:48 · 137 阅读 · 0 评论 -
小白日记:作业管理之进程调度
进程调度概述进程调度是指计算机通过决策决定哪个进程优先使用就绪状态的进程可以获得cpu使用权,之所以有这个制度,也是因为在多道程序设计的环境下,计算机要对先让哪个进程运行,后让哪个程序运行作出选择,要不然就程序就乱套了。进程调度有两个步骤,第一步我们需要将旧进程的运行信息保留,确保信息不会丢失。然后将旧进城请出运行环境。第二步就是选择好需要运行的进程,准备好他需要的运行那个环境并为他分配好cpu。就绪队列的排队机制将就绪队列按照一定的顺序排成队列,以便程序可以用最短的时间找到就绪队列。选..原创 2020-08-28 21:49:30 · 179 阅读 · 0 评论 -
小白日记:操作系统之Linux的进程管理
linux进程的相关概念进程的类型 前台进程 前台进程就是占用终端shell,可以和用户进行交互的进程。 后台进程 没有占用终端,和用户之间没有交互,优先级比前台进程低,以end为结尾。 守护进程 守护进程是特殊的后台进程,一般在系统开始运行时就存在并开始运行,一直运行到系统结束运行。名字的末尾会以d结尾。一般都是初始进程的子进程。进程的标记 进程的ID是每个进程唯一的标记,就和身份证一样。ID为一个非负整数原创 2020-08-27 13:58:53 · 144 阅读 · 0 评论 -
小白日记:进程管理之进程同步
为什么需要进程间的同步因为如果没有进程间的同步,那么程序在运行时就会变得混乱,比如说工厂生产出一个手机,你取一个没问题,但是如果出现了连着取一个的情况,就会出现问题了。因为进 程不配套,整个生产线就乱套了。再比如说,有五个哲学家进餐,他们一人面前放着一个碗,它们的右边都放着一根筷子,一个哲学家饿了就会拿起左右各一根筷子吃饭。那 么5个人都饿时,就会出现五个人都拿着一根筷子的情况,就都会饿死。说白了就是在没有统筹安排的情况下所有进程乱运一气,程序就会出错。进程间同步的原则 临界资源就是那原创 2020-08-25 14:58:57 · 90 阅读 · 0 评论 -
小白日记:进程管理之五状态模型
就绪状态在进程获得除了cpu资源以外的所有资源的情况下,只需要cpu资源到位就可以运行的情况叫做就绪状态。在一个系统中通常有多个并发执行,所以所有处于就绪状态的进程会排成一个队列,这个队列就被称为就绪队列。如果cpu只有一个核的话,那么在某一个时刻只能有一个进程是处于运行状态的。多核就可以并行多个进程。阻塞状态进程因为某种原因,在运行过程中无法继续执行,从而不得不放弃cpu资源的状态叫做阻塞状态。与上面的就绪队列一样,多个阻塞队列也会构成一个阻塞队列。运行状态就是进程在获得了运行所需..原创 2020-08-23 20:50:29 · 348 阅读 · 0 评论 -
小白日记:操作系统之进程实体(学习大神所得,记个笔记,请勿打赏)
为什么需要进程? 在没有操作系统之前,只能运行一个程序。不能同时运行多个程序,对于资源很是浪费。所以在有操作系统后,我们引入了进程这个概念,以此来提高资源的利用率。 进程是系统进行资源分配以及调度的最基本单位。 进程在多道程序同时在同一个物理设备运行的时候,起到了对这些程序进行隔离的作用,以此来保障这些程序正常运行。 进程能使计算机的资源得到更合理的运用,大幅提高资源利用率。进程的实体主存中的进程形态 在主存中,进程是一段连续存储的空间,名字叫进程控制快。原创 2020-08-22 18:15:42 · 342 阅读 · 0 评论