摘要: 进程调度 程序员编写的程序要想获得运行,必须首先把静态的程序变成一个个动态的进程,进程因创建而产生,因调度而执行,因撤销而消亡,这便是一个进程的一个生命周期。在电脑的内存中,有着成千上万的进程,而cpu仅仅只有一个,那该如何管理这些进程完成进程的调度呢? 首先从进程的管理谈起,进程由三部分构成——进 阅读全文
posted @ 2020-07-09 20:45 如魚飲水 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 1. 实验要求 以fork和execve系统调用为例分析中断上下文的切换 分析execve系统调用中断上下文的特殊之处 分析fork子进程启动执行时进程上下文的特殊之处 以系统调用作为特殊的中断,结合中断上下文切换和进程上下文切换分析Linux系统的一般执行过程 2. fork系统调用 2.1 分析 阅读全文
posted @ 2020-06-15 21:14 如魚飲水 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 1. 实验要求 找一个系统调用,系统调用号为学号最后2位(我是89号)相同的系统调用 通过汇编指令触发该系统调用 通过gdb跟踪该系统调用的内核处理过程 重点阅读分析系统调用入口的保存现场、恢复现场和系统调用返回,以及重点关注系统调用过程中内核堆栈状态的变化 2. 实验流程 配置实验环境; 编写含有 阅读全文
posted @ 2020-05-27 21:49 如魚飲水 阅读(571) 评论(0) 推荐(0) 编辑
摘要: mykernel2.0基于linux-5.4.34版本,来源https://github.com/mengning/mykernel,在本实验中首先配置并编译了mykernel2.0,其次进程切换作为操作系统内核最核心的功能,在本实验中,实现了基于时间片轮转调度算法的进程切换功能。 1. 配置并编译 阅读全文
posted @ 2020-05-13 21:58 如魚飲水 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 方法一:把类声明为final 方法二:对类中的构造器声明为private,类中提供一个static方法,完成对类的初始化。如下代码: 阅读全文
posted @ 2019-10-26 20:37 如魚飲水 阅读(803) 评论(0) 推荐(0) 编辑
摘要: 假设有C继承B,B继承A; 继承会继承除private修饰的成员变量,方法。但不会继承构造器。 所以调用被继承下来的方法时,不需要指明主调者,但是调用构造器时,就需要指明主调者,那就是super。如果继承中出现了函数的覆盖,那么默认主调者就是本对象(实例方法)或本类(类方法),如果想要调用被覆盖的方 阅读全文
posted @ 2019-10-24 12:37 如魚飲水 阅读(281) 评论(0) 推荐(0) 编辑
摘要: Java内存空间分两种,一种是栈内存,有多个,一种是堆内存,只有一个,在堆内存中又有一块方法区。 方法区中存储的是:类的信息(类名,类的直接父类,类的访问修饰符),类变量,类方法代码,实例方法代码,常量池。注意没有实例变量。 当使用new创建一个对象的时候,JVM实际上做了三件事:加载类,创建该类的 阅读全文
posted @ 2019-10-24 12:02 如魚飲水 阅读(145) 评论(0) 推荐(0) 编辑
摘要: Mysql的select语句的基本用法 阅读全文
posted @ 2019-10-22 19:05 如魚飲水 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 垃圾回收机制,依赖JRE和JVM,涉及操作系统中内存的分配与回收。依据所学,我猜想这种机制需要的数据结构是堆内存分配表(链),管理已分配和未分配的堆内存,对于已分配堆内存,需要知道由栈内存中的哪些变量引用。知道了这些,依赖垃圾检测和回收算法,把长期未得到栈变量引用的堆内存块回收,挂到未分配内存表中。 阅读全文
posted @ 2019-10-16 12:08 如魚飲水 阅读(105) 评论(0) 推荐(0) 编辑
摘要: Java的运行机制是:先编译,后解释。 典型的编译型编程语言是:C和C++。 eg:用c语言编写的*.c文件编译生成*.h文件,通过链接将*.h文件链接成*.exe文件,然后就可以运行,编译型的高级语言程序运行效率高。 典型的解释型编程语言是:Python。 eg:*.py程序运行不会生成中间文件, 阅读全文
posted @ 2019-10-15 18:21 如魚飲水 阅读(107) 评论(0) 推荐(0) 编辑