2022-2-22 《操作系统导论》的代码 —— 第2章操作系统介绍
体会 CPU 虚拟化,同时运行许多程序
cpu.c
#include<stdio.h>
#include<stdlib.h>
#include<sys/time.h>
#include<assert.h>
#include <unistd.h>
int main(int argc,char* argv[]){if(argc != 2){fprintf(stderr,"usage:cpu<string>\n");}char *str = argv[1];while (1){sleep(1);printf("%s\n",str);}return 0;
}
程序的单个实例
进程的多个实例
./cpu A & ./cpu B & ./cpu C & ./cpu D &
运行多个实例的时候,无法通过 ctrl + c 使得进程停止。只能在另外的终端通过 kill -9 (pid) 终止进程。
mem.c
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int main(int argc,char *argv[]){int *p = (int*)malloc(sizeof(int));assert(p != NULL);printf("(%d) memory address of p:%08x\n",getpid(),(unsigned long)p);//printf("(%d) memory address of p:%08x\n",getpid(),(unsigned)p);//cast from ‘int*’ to ‘unsigned int’ loses precision [-fpermissive]//主要是 8 字节的指针转化为 unsigned(4字节),不符合转换的精度,//应该转化为 unsigned long//由此可以得知,原来的程序是在 32位的电脑上测试*p = 0;while (1){sleep(1);*p = *p + 1;printf("(%d) p: %d\n",getpid(),*p);}return 0;
}
运行程序的一个实例
运行程序的多个实例
和书本上的结果不同,两个进程并没有表现出相同的地址
threads.c
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
volatile int counter = 0;
int loops;
void *worker(void * arg){int i;for(int i = 0;i < loops;i++){counter++;}return NULL;
}
int main(int argc,char *argv[]){if(argc != 2){fprintf(stderr,"usage:threads<value>\n");exit(1);}loops = atoi(argv[1]);pthread_t p1,p2;int ret = pthread_create(&p1,NULL,worker,NULL);if(ret == -1){perror("pthread_create");exit(1);}ret = pthread_create(&p2,NULL,worker,NULL);if(ret == -1){perror("pthread_create");exit(1);}pthread_join(p1,NULL);pthread_join(p2,NULL);printf("Final Value : %d\n",counter);return 0;
}
每次输出得到的结果都不一样。
顺便复习一下 pthread_join()
pthread_join()函数,以阻塞的方式等待thread指定的线程结束。当函数返回时,被等待线程的资源被收回。如果线程已经结束,那么该函数会立即返回。并且thread指定的线程必须是joinable的。
io.c
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
int main(void){// int fd = open("/tmp/file",O_WRONLY | O_CREAT | O_TRUNC,S_IRWXU);int fd = open("file.txt",O_WRONLY | O_CREAT | O_TRUNC,S_IRWXU);assert(fd > -1);int rc = write(fd,"hello world\n",13);assert(rc == 13);close(fd);return 0;
}
程序里面的补充知识
The following symbolic constants are provided for mode:S_IRWXU 00700 user (file owner) has read, write, and executepermissionO_TRUNCIf the file already exists and is a regular file and the accessmode allows writing (i.e., is O_RDWR or O_WRONLY) it will betruncated to length 0. If the file is a FIFO or terminal devicefile, the O_TRUNC flag is ignored. Otherwise, the effect ofO_TRUNC is unspecified.
//好像是如果原来文件存在,其长度就会被截断成 0
2022-2-22 《操作系统导论》的代码 —— 第2章操作系统介绍相关推荐
- 操作系统导论OSTEP 第十六章作业答案 分段
答案Github库 https://github.com/jzplp/OSTEP-Answers 问题 1 答案 [testjz@localhost vm-segmentation]$ ./segme ...
- 豆瓣评分 9.7,等了好久的《操作系统导论》Operating Systems 终于来了
豆瓣评分9.7,等了好久的<操作系统导论>(Operating Systems:Three Easy Pieces)终于出版啦. 本书作者是美国威斯康星大学计算机系教授(夫妇),美国计算机 ...
- 操作系统导论期末复习题
操作系统导论期末复习题 进程 进程调度策略和内存虚拟化机制 memory virtualization 并发 Persistance持久化 进程 1.When a process makes a sy ...
- 操作系统导论期末复习
操作系统导论期末复习 操作系统介绍 什么是操作系统:操作系统是管理计算机硬件与软件资源的计算机程序,提供其他程序和硬件之间的接口,对需求进行管理,对资源进行分配,对用户提供服务,是计算机中软件和硬件的 ...
- 目标检测第5步:如何在Windows 10系统下,搭建YOLOv5(5.0)环境?保姆级,没有人比这个更详细了(更新时间2022.3.22)
(请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 目录 一.安装Anaconda或Miniconda 二.安装CUDA 三.安装cuDNN 四.安装Pyt ...
- 《操作系统导论》吐血万字整理 - 附下载地址及思维导图
前言 我看的是这本,豆瓣9.4,很经典的教材书,在文章末尾我附上了网盘链接 这篇博客算是一个完整的读书笔记,我大概读了20天看完的,电子版做笔记很方便,推荐一波,很多课上没有讲到的知识在这本书里都详细 ...
- 操作系统导论-虚拟化
根据操作系统导论(OSTEP)记录的笔记. 目录 CPU虚拟化 一.进程与进程API 二.进程执行 三.进程调度 内存虚拟化 一.内存API 二.地址空间 三.地址转换机制 四.分段 五.空闲空间管理 ...
- 雷军20年前作文:我会当一辈子程序员 + 分享雷军22年前写的代码
身为小米科技的创始人.董事长和首席执行官,雷军的名字如雷贯耳.其实扒扒雷军的年轻时代,其实他大学读的是计算机专业,是程序员出身,而且一干就是10年.有网友曾说"代码只服雷军".雷军 ...
- 计算机操作系统(汤子瀛)习题答案 第一章操作系统导论
第1章.操作系统导论 1.设计现代 OS 的主要目标是什么? 方便性,有效性,可扩充性和开放性. 2.OS 的作用可表现为哪几个方面? A.OS 作为用户与计算机硬件系统之间的接口: B.OS 作为计 ...
最新文章
- MIT自然语言处理第三讲:概率语言模型(第四、五、六部分)
- 中判断字符串是否为空_leetcode1704_go_判断字符串的两半是否相似
- 模拟CA机构制作CA机构证书
- Notes:DOM的事件模拟
- UI设计中的黄金分割率,实用案例适合临摹学习
- U盘病毒专杀工具Usbcleaner
- C语言编程必背单词百度云,c语言编程必背单词-20210403022023.pdf-原创力文档
- ADKAR模型简介(转)
- 挂马攻击的介绍和防御
- Java实现系统统一对外开放网关入口设计
- Python xlrd读取、处理excel日期类型
- 如何让Word 2003识别Docx文件
- python用百度云接口实现植物识别和动物识别
- 三大门派var,const,let之间的纠纷
- 软考高项——配置管理
- 《笨办法学python3》再笨的人都能学会python,附PDF,拿走不谢
- 多重条件结构(知识就是力量!)
- Monkey Business 骗人的把戏
- 反三角函数之间的关系以及导数关系
- 乌班图linux命令,乌班图Ubuntu常用命令及用法详解