4月份之前一直在忙着找工作,方向是iOS开发,但是经过了几次笔试面试后,感觉自身在计算机基础方面还是理解的不够深入,加上一些个人原因,于是决定转向考研,也借这个机会巩固一下计算机基础,学习一些新技术。
我目前使用的书是王道系列丛书,也就是数据结构、计算机组成原理、操作系统、计算机网络这四门学科,其中数据结构、操作系统和计算机网络也是各种笔试面试中最经常被考察到的知识点。
经过这段时间的学习,感觉很多书籍上的知识点过于散乱,对于整个知识体系的构建不是太好,所以我现在打算把学到的一些知识点整合精简一下,前期会以王道书上的知识点为主,再后面的复习中会结合其他书籍上的内容和我个人的理解加以修改补充,方便日后的学习回顾,所以就写了这篇博客。
进程与线程
进程的组织(又称进行映像、进程实体,静态存在,进程则是动态存在的):程序段(代码,可被多个进程共享)、数据段(待处理数据、中间数据、结果数据)、进程控制段(PCB)
进程控制段(PCB):进程创建时,操作系统就新建一个PCB,常驻内存中。在进程结束时删除。PCB是进程存在的唯一标志。(当创建一个进程时,系统为该进程建立一个PCB;当进程执行时,系统通过其PCB了解进程的状态信息,以便对其进行操作;当进程结束时,系统收回其PCB,进程随之消亡)
PCB中主要包括进程描述信息、进程控制和管理信息、资源分配清单和处理机相关信息等。
管理PCB的方法:链接方式(类似于链表队列,不同队列代表不同状态的PCB)、索引方式(类似于字典)
进程的特征:动态性、并发性、独立性、异步性、结构性。
进程是资源分配的基本单位。
进程的状态与转换:
就绪状态->运行状态:处于就绪状态的进程获得处理机资源(处理机时间片),进入运行状态
运行状态->就绪状态:1.时间片用完后,不得不让出处理机,该进程进入就绪状态。
2.在抢占式系统中,有更高优先级的进程就绪时,正在执行的进程不得不让出处理机,进入就绪状态。
运行状态->阻塞状态:进程请求某一资源或等待某一事件,进入阻塞状态(由用户态程序调用系统内核的过程)
阻塞状态->就绪状态:进程得到所请求的资源或等待的事件到来,就进入就绪状态
进程控制:
进程创建原语:用户登录,作业调度,提供服务,应用请求
1.为新进程分配一个PCB
2.为新进程分配资源和空间(若不够,则进入”等待状态”)
3.初始化PCB(设置PCB上的基本信息)
4.把其PCB插入就绪队列
进程终止原语:正常结束、发生异常、外界干预
1.根据指定的标识符,找到对应PCB,获取其进程状态
2.若处于执行状态,则终止进程,讲处理机资源分配给其他进程
3.若该进行还有子进程,则终止其所有子进程
4.将该进程所有资源归还其父进程(若无,则还给操作系统)
5.删除PCB
进程阻塞和唤醒原语
阻塞:等待资源
1.根据指定的标识符,找到对应PCB,获取其进程状态
2.若处于运行状态,则停止运行,将其状态转为阻塞状态,保护其现场
3.把其PCB插入等待队列中
唤醒:资源到达
1.在等待队列中找到PCB
2.将其PCB移除等待队列,将其状态置为就绪状态
3.把其PCB插入就绪队列
进程切换原语:时间片用完、被高优先级抢占处理机、主动放弃
1.保存处理机上下文(计数器和其他寄存器)
2.更新被切换进程的PCB信息
3.把PCB插入相应队列
4.更新要执行进程的PCB信息
5.更新内存
6.回复处理机上下文
进程的通信:
进程通信是秩进程之间的信息交换。
共享存储:基础数据结构共享(低级)、基于存储区共享(高级)
简单的理解就是:甲和乙中间有一个大布袋,甲和乙交换物品是通过大布袋进行的,甲把物品放到大布袋里,乙拿走。但甲不能直接到乙的手中拿东西,乙也不能直接到甲的手中拿东西。
消息传递:直接通信、间接通信
简单的理解就是,甲要告诉乙某些事情,就要写信,然后通过邮差送给乙。直接通信就是邮差把信直接送到乙的手上(类似打电话),间接通信就是,乙家门口有个邮箱,邮差把信放到邮箱里(类似电子邮件)
管道通信:半双工通信
简单的理解就是:甲乙双方通过对讲机进行交流,甲说话的时候乙不能说话,直到甲说over之后,乙才能向甲说话。(在这里,一句话代表管道通信一次传输的数据)
线程的概念:
线程是一个基本的CPU执行单元,也是程序执行流的最小单元,是独立调度和分派的基本单位,自身不拥有系统资源(只拥有运行中必不可少的资源:ID、计数器、寄存器、堆栈)
线程和进程的区别(感觉面试总喜欢问这个)
1.线程是独立调度的基本单位,进程是拥有资源的基本单位。
2.进程是拥有资源的基本单位,线程不拥有系统资源(有一点必不可少的资源),但是线程可以访问其所在进程的系统资源。
3.进程的调度涉及大量资源,系统开销很大。线程开销很小,可以随意切换。
4.进程间通信需要进程同步和互斥等手段的辅助以保证数据的一致性,线程间可以直接通信。(又扯到了线程通信和进程通信的具体方式,因为和考研无关,就不详细说明了)
线程的实现方式:用户及线程和内存级线程。