应用程序与基本执行环境应用程序执行环境
All problems in computer science can be solved by another level of indirection。
– David Wheeler
在计算机领域中,抽象是一种深刻的哲学、深入软件开发的指导思想。
应用程序通过调用编程语言提供的标准库或者其他三方库的API接口,仅需少量代码就能完成复杂的功能。
从操作系统内核的角度看来,它上面的一切都属于用户态软件,而它自身属于内核态软件。无论用户态应用如何编写,是手写汇编代码,还是基于某种高级编程语言调用其标准库或三方库,某些功能总要直接或间接的通过操作系统内核提供的 系统调用 (System Call) 来实现。因此系统调用充当了用户和内核之间的边界。内核作为用户态软件的执行环境,它不仅要提供系统调用接口,还需要对用户态软件的执行进行监控和管理。
从硬件的角度来看,它上面的一切都属于软件。硬件可以分为三种: 处理器 (Processor,也称CPU),内存 (Memory) 还有 I/O 设备。其中处理器无疑是其中最复杂,同时也最关键的一 ...
chapter3 编程作业任务获取任务信息ch3 中,我们的系统已经能够支持多个任务分时轮流运行,我们希望引入一个新的系统调用 sys_task_info 以获取当前任务的信息,定义如下:
fn sys_task_info(ti: *mut TaskInfo) -> isize
syscall ID: 410
查询当前正在执行的任务信息,任务信息包括任务控制块相关信息(任务状态)、任务使用的系统调用及调用次数、系统调用时刻距离任务第一次被调度时刻的时长(单位ms)。
struct TaskInfo { status: TaskStatus, syscall_times: [u32; MAX_SYSCALL_NUM], time: usize}
参数:
ti: 待查询任务信息
返回值:执行成功返回0,错误返回-1
说明:
相关结构已在框架中给出,只需添加逻辑实现功能需求即可。
在我们的实验中,系统调用号一定小于 500,所以直接使用一个长为 MAX_SYSCALL_NUM=500 的数组做桶计数。
运行时间 time 返回 ...
并发Bug笔记内容来自蒋炎岩老师的OS课程以及slides
死锁AA-Deadlockunlock之前出现中断,然后lock(),此时会出现spin
ABBA-Deadlock(最常见)
T->lock(A)->lock(B)
T->lock(B)->lock(A)
当一个线程lock AB后才能执行,但如果T1lock(A),T2lock(B),此时无法满足条件,死锁
如何避免死锁
Lock ordering
任意时刻系统中的锁都是有限的
给所有锁编号 (Lock Ordering)
严格按照从小到大的顺序获得锁
Proof (sketch)
任意时刻,总有一个线程获得 “编号最大” 的锁
这个线程总是可以继续运行
数据竞争(Data Race)不同的线程同时访问同一内存,且至少有一个是写
例子:
Case 1: 上错了锁
12345678910void T_1() { spin_lock(&A); sum++; spin_unlock(&A); } void T_2() ...
The Problems of Using OpenEuler WSL记录一下在OS课上使用OpenEuler WSL遇到的坑
OpenEuler 官方下载WSL系统的脚本十分炸裂,能在x86架构的机器上安装MIPS架构的结果,建议避雷,使用微软商店的软件包下载
本次实验的要求:
1.向OpenEuler系统,或者OpenKylin系统中,增加一个系统调用/或内核模块,鼓励程序逻辑的多样化2.撰写一个应用测试程序调用该系统调用/测试该内核模块3.使用trace/ptrace/strace,或类似的系统跟踪工具来对该测试程序进行跟踪调试
内核问题问题描述实验环境是在WSL2下使用OpenEuler,CentOS套壳
借鉴了一些网络上的代码后,对源码进行编译,下面是Makefile文件内容
123456789obj-m:=syscall.oPWD:= $(shell pwd)KERNELDIR:= /lib/modules/$(shell uname -r)/buildEXTRA_CFLAGS= -O0all: make -C $(KERNELD ...
my love
未读
铁路网的分布,这种分布的不平衡,铁路网发展的不平衡,是全世界现代资本主义即垄断资本主义造成的结果。这种结果表明,只要生产资料私有制还存在,在上述这样的经济基础上,帝国主义战争是绝对不可避免的。
很明显,这种大量的超额利润(因为它是在资本家从“自己”国家工人身上榨取的利润之外得来的)可以用来收买工人领袖和工人贵族这个上层。
这个资产阶级化了的工人阶层即“工人贵族”阶层,这个按生活方式、工资数额和整个世界观来说已经完全小市民化的工人阶层,是第二国际的主要支柱,现在是资产阶级的主要社会支柱。因为这是资产阶级在工人运动中的真正代理人,是资本家阶级的工人帮办,是改良主义和沙文主义的真正传播者。在无产阶级同资产阶级的国内战争中,他们有不少人必然会站在资产阶级方面,站在“凡尔赛派”方面来反对“公社战士”。
帝国主义阶段的资本主义紧紧接近最全面的生产社会化,它不顾资本家的愿望和意识,可以说是把他们拖进一种从完全的竞争自由向完全的社会化过渡的新的社会秩序。
生产社会化了,但是占有仍然是私人的。社会化的生产资料仍旧是少数人的私有财产。在形式上被承认的自由竞争的一般架子依然存在,而少数垄断者对其余居民的压 ...
建站原因在b站上看到了一个搭建个人博客网站的视频,心血来潮以及作为Geek必备的博客作为驱动力,于是查找了一些资料最终找到了以github + hexo 的方式建立博客。感谢朋友(畅姐我的神)的倾情推荐,给了我一个好教程。
曲折的建站过程说到这个,不得不吐槽一下我这令人愤怒的电脑。从我大一上学期配C语言环境开始,再到虚拟机和linux ssh远端连接,这玩意就没让我省心过。吐槽结束,现在是问题时间。
一由于初次上手个人网站搭建,所知甚少。而且最开始时,没有如此系统的教程,都是用的零七碎八的教程,难免遇到各种问题。
npm node hexo 安装完成后出现类似command not found的问题,用Google搜索、在stackoverflow上找相关问题,都没能解决这个问题,最后尝试了csdn上的一个说法,即设置环境变量,在path下面加上npm node hexo等的路径,成功解决问题。(多少有点zz了)路径问题占据了我建站的绝大多数时间。
设置部署仓库和分支出现 “FATAL YAMLException: can not read a block mapping ent ...
劳动不是一切财富的源泉。自然界同劳动一样也是使用价值(而物质财富就是由使用价值构成的!)的源泉,劳动本身不过是一种自然力即人的劳动力的表现
只有一个人一开始就以所有者的身份来对待自然界这个一切劳动资料和劳动对象的第一源泉,把自然界当做属于他的东西来处置,他的劳动才成为使用价值的源泉,因而也成为财富的源泉。
在一个集体的、以生产资料公有为基础的社会中,生产者不交换自己的产品;用在产品上的劳动,在这里也不表现为这些产品的价值,不表现为这些产品所具有的某种物的属性,因为这时,同资本主义社会相反,个人的劳动不再经过迂回曲折的道路,而是直接作为总劳动的组成部分存在着。
权利决不能超出社会的经济结构以及由经济结构制约的社会的文化发展
庸俗的社会主义仿效资产阶级经济学家把分配看成并解释成一种不依赖于生产方式的东西,从而把社会主义描写为主要是围绕着分配兜圈子。(由此可见,所谓依靠政府进行再分配的温和社会主义,即社会民主主义国家并不能称作是代表无产阶级的国家,它并未改变资本主义社会的经济基础因而也没有改变无产阶级被剥削的事实。)
在资本主义社会和共产主义社会之间,有一个从前者变为后者的革命转变时期。同 ...
my love
未读第一卷第一章费尔巴哈唯物主义观点和唯心主义观点的对立
因此,他们是什么样的,这同他们的生产是一致的——既和他们生产什么一致,又和他们怎样生产一致。
各民族之间的相互关系取决于每一个民族的生产力、分工和内部交往的发展程度。
一个民族的生产力发展的水平,最明显地表现于该民族分工的发展程度。任何新的生产力,只要它不是迄今已知的生产力单纯的量的扩大(例如,开垦土地),都会引起分工的进一步发展。
一个民族内部的分工,首先引起工商业劳动同农业劳动的分离,从而也引起城乡的分离和城乡利益的对立。分工的进一步发展导致商业劳动同工业劳动的分离。
如果他们把哲学、神学、实体和一切废物消融在“自我意识”中,如果他们把“人”从这些词句的统治下——而人从来没有受过这些词句的奴役——解放出来,那么“人”的“解放”也并没有前进一步;只有在现实的世界中并使用现实的手段才能实现真正的解放[16];没有蒸汽机和珍妮走锭精纺机就不能消灭奴隶制;没有改良的农业就不能消灭农奴制;当人们还不能使自己的吃喝住穿在质和量方面得到充分保证的时候,人们就根本不能获得解放
我们谈的是一些没有任何前提的德国人,因此我们首先应当确定一切人类生存 ...