操作系统
文章平均质量分 68
操作系统相关
D-A-X
这个作者很懒,什么都没留下…
展开
-
“算命大师”脚本
算命大师Shell脚本编写 编写程序如下:#!/bin/bashecho "------算命大师------"zodiac=("鼠" "牛" "虎" "兔" "龙" "蛇" "马" "羊" "猴" "鸡" "狗" "猪")constellation=("水瓶座" "双鱼座" "白羊座" "金牛座" "双子座" "巨蟹座" "狮子座" "处女座" "天秤座" "天蝎座" "射手座" "摩羯座")mark=(20 19 21 20 21 22 23 23 23 24 23 22)while原创 2021-03-08 20:25:15 · 706 阅读 · 1 评论 -
页面淘汰算法模拟(FIFO和LRU)
结构设计 设置物理页框个数为6,设置页面大小为32,虚拟页个数至多320个。设置有一个访问序列vis,该序列长度为3200000。 对于物理页框的结构,由于其需要存储该单元的新数据被加载的时间、最近一次命中的时间以及该单元内存放的虚拟页的页号,因此使用如下结构体:const int phy_page_num = 6;const int page_size = 320;const int visit_time = 3200000; //访问次数struct cmd{ int pos;原创 2021-03-08 20:22:55 · 1038 阅读 · 0 评论 -
局部性原理测试
安装sysstat 安装sysstat以使用其中的pidstat来查看缺页率,安装结果如下:测试代码 编写代码如下:#include <stdio.h>#define MAX 10000int arr[MAX][MAX];int main(int argc, char *argv[]){ if(argc > 1){ //局部性 for(int i = 0; i < MAX; ++i){ for(int j = 0;原创 2021-03-08 20:21:41 · 289 阅读 · 0 评论 -
Linux地址映射
“/proc/<pid>/pagemap”解构 从官方文件中得到如下信息:“/proc/<pid>/pagemap”这个文件让用户空间进程发现每个虚拟页映射到哪个物理帧。每个虚拟页包含一个64位值,该64位值包含以下数据(文件fs/proc/task_mmu.c中的pagemap_read可见):0-54位:物理页帧号(PFN)(如果存在);0-4位:交换类型(如果交换);5-54位:交换偏移量;55位:pte用来标记是否是soft-dirty的;原创 2021-03-08 20:15:47 · 1166 阅读 · 0 评论 -
Linux进程死锁等相关实验汇总
1. 在Linux下创建一对父子进程,实现wait等待 创建子进程的fork()函数位于unistd.h头文件中,等待进程运行结束的waitpid()函数位于sys/wait.h头文件中。当成功创建子进程时,fork()函数对父进程返回该子进程的进程号,对子进程返回0;若创建失败则会返回-1。编写程序如下:#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/wait.原创 2021-03-08 20:11:47 · 571 阅读 · 0 评论 -
Linux驱动编写(适用WSL2)
驱动代码架构分析 驱动程序与内核模块的编写有着共通之处,驱动程序在内核模块的基础上补充添加更为完善的调用响应。驱动的执行过程为:应用程序使用库提供的open(dev_name, mode)函数打开dev_name设备文件;库根据传入参数执行swi指令,这条指令将会引发CPU异常从而进入内核;内核的异常处理函数根据所提供的参数查找相应的驱动程序;执行驱动程序;返回一个文件句柄给库,进而返回给应用程序。 其他库函数read()、write()等的执行过程类似。因此,要完成驱动程序的编写,实原创 2021-03-08 20:06:09 · 1279 阅读 · 0 评论 -
WSL2下增删Linux内核模块
编写内核模块 该模块装载时会在内核态显示Hello,卸载时会显示Bye,具体代码如下:#include <linux/module.h>#include <linux/init.h>#include <linux/kernel.h> MODULE_LICENSE("GPL");MODULE_AUTHOR("Yige LIU");MODULE_DESCRIPTION("hello module"); static int __init hello_in原创 2021-03-08 19:59:34 · 2149 阅读 · 2 评论 -
WSL2(Ubuntu 18.04)安装bochs(2.6.11)
前期准备需要实现了WSL2安装图形化界面,教程安装依赖sudo apt-get install libx11-dev xserver-xorg-dev xorg-dev libsdl1.2-dev bximage vgabios安装gcc和nasmsudo apt-get install build-essential nasm安装bochs下载最新版本的bochs,笔者时2.6.11版本:wget https://sourceforge.net/projects/bochs/files原创 2021-03-02 11:07:46 · 1051 阅读 · 0 评论 -
WSL2添加图形化界面
VcXsrv + xfce4 + xubuntu首先下载VcXsrv, 然后启动XLaunch。启动的时候选左下那个one window, display里把-1改成0。然后一直默认next即可。接着安装xfce4:sudo apt-get install xfce4然后安装xubuntu:sudo apt-get install xubuntu-desktop接着在~/.bashrc中添加:export DISPLAY=`cat /etc/resolv.conf | grep na原创 2021-03-02 01:07:05 · 6039 阅读 · 0 评论 -
autojump安装(未安装zsh只有bash)
环境说明想在没有zsh的环境中安装autojump,发现大佬们都安了zsh,但笔者委实不想安(以后可能会真香),只能自己找方法。笔者安装环境为WSL2(Ubuntu版本),其他发行版Linux系统也可以,没有安装zsh。安装autojumpsudo apt-get install autojump配置授人以鱼不如授人以渔,autojump的GitHub上给出了配置说明:打开该文件/usr/share/doc/autojump/README.Debian查看:当使用bash时,需要在~/原创 2020-12-08 12:06:11 · 703 阅读 · 0 评论 -
WSL2(Ubuntu)下添加新的Linux(5.7.9)系统调用
综述添加系统调用的大致工作为:下载Linux内核在内核中添加调用编译该更改后的内核替换该内核并测试准备工作配置库 由于编译过程中需要很多库,因此需要提前进行配置。如果编译过程中遇到的报错均在下文的报错信息中记录。准备安装的库的命令为:sudo apt-get install libncurses5-dev libncursesw5-devsudo apt-get install bison flexsudo apt-get install libelf-dev libssl-de原创 2020-11-17 12:02:19 · 849 阅读 · 0 评论 -
Linux中task_struct结构体分析
所在文件task_struct结构体位于内核文件/include/linux/sched.h中。分析去GitHub上查看源码中的该结构体,分析如下:struct task_struct { /* * 进程状态。 */ volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ /* * 进程的基本信息。 */ struct thread_info *thread_info; atomic_t usa原创 2020-11-08 17:27:37 · 919 阅读 · 0 评论 -
WSL 2(Ubuntu18.04)编译Linux内核(5.7.9)并替换掉WSL 2原有内核
准备工作配置库 由于编译过程中需要很多库,因此需要提前进行配置。如果编译过程中遇到了报错可以在下文的报错信息中找到对应的解决办法。准备安装的库的命令为:sudo apt-get install libncurses5-dev libncursesw5-devsudo apt-get install bisonsudo apt-get install flexsudo apt-get install libelf-devsudo apt-get install libssl-dev准备Li原创 2020-10-14 01:51:28 · 8279 阅读 · 2 评论