体会 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章操作系统介绍相关推荐

  1. 操作系统导论OSTEP 第十六章作业答案 分段

    答案Github库 https://github.com/jzplp/OSTEP-Answers 问题 1 答案 [testjz@localhost vm-segmentation]$ ./segme ...

  2. 豆瓣评分 9.7,等了好久的《操作系统导论》Operating Systems 终于来了

    豆瓣评分9.7,等了好久的<操作系统导论>(Operating Systems:Three Easy Pieces)终于出版啦. 本书作者是美国威斯康星大学计算机系教授(夫妇),美国计算机 ...

  3. 操作系统导论期末复习题

    操作系统导论期末复习题 进程 进程调度策略和内存虚拟化机制 memory virtualization 并发 Persistance持久化 进程 1.When a process makes a sy ...

  4. 操作系统导论期末复习

    操作系统导论期末复习 操作系统介绍 什么是操作系统:操作系统是管理计算机硬件与软件资源的计算机程序,提供其他程序和硬件之间的接口,对需求进行管理,对资源进行分配,对用户提供服务,是计算机中软件和硬件的 ...

  5. 目标检测第5步:如何在Windows 10系统下,搭建YOLOv5(5.0)环境?保姆级,没有人比这个更详细了(更新时间2022.3.22)

    (请先看置顶博文)本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客 目录 一.安装Anaconda或Miniconda 二.安装CUDA 三.安装cuDNN 四.安装Pyt ...

  6. 《操作系统导论》吐血万字整理 - 附下载地址及思维导图

    前言 我看的是这本,豆瓣9.4,很经典的教材书,在文章末尾我附上了网盘链接 这篇博客算是一个完整的读书笔记,我大概读了20天看完的,电子版做笔记很方便,推荐一波,很多课上没有讲到的知识在这本书里都详细 ...

  7. 操作系统导论-虚拟化

    根据操作系统导论(OSTEP)记录的笔记. 目录 CPU虚拟化 一.进程与进程API 二.进程执行 三.进程调度 内存虚拟化 一.内存API 二.地址空间 三.地址转换机制 四.分段 五.空闲空间管理 ...

  8. 雷军20年前作文:我会当一辈子程序员 + 分享雷军22年前写的代码

    身为小米科技的创始人.董事长和首席执行官,雷军的名字如雷贯耳.其实扒扒雷军的年轻时代,其实他大学读的是计算机专业,是程序员出身,而且一干就是10年.有网友曾说"代码只服雷军".雷军 ...

  9. 计算机操作系统(汤子瀛)习题答案 第一章操作系统导论

    第1章.操作系统导论 1.设计现代 OS 的主要目标是什么? 方便性,有效性,可扩充性和开放性. 2.OS 的作用可表现为哪几个方面? A.OS 作为用户与计算机硬件系统之间的接口: B.OS 作为计 ...

最新文章

  1. MIT自然语言处理第三讲:概率语言模型(第四、五、六部分)
  2. 中判断字符串是否为空_leetcode1704_go_判断字符串的两半是否相似
  3. 模拟CA机构制作CA机构证书
  4. Notes:DOM的事件模拟
  5. UI设计中的黄金分割率,实用案例适合临摹学习
  6. U盘病毒专杀工具Usbcleaner
  7. C语言编程必背单词百度云,c语言编程必背单词-20210403022023.pdf-原创力文档
  8. ADKAR模型简介(转)
  9. 挂马攻击的介绍和防御
  10. Java实现系统统一对外开放网关入口设计
  11. Python xlrd读取、处理excel日期类型
  12. 如何让Word 2003识别Docx文件
  13. python用百度云接口实现植物识别和动物识别
  14. 三大门派var,const,let之间的纠纷
  15. 软考高项——配置管理
  16. 《笨办法学python3》再笨的人都能学会python,附PDF,拿走不谢
  17. 多重条件结构(知识就是力量!)
  18. Monkey Business 骗人的把戏
  19. 反三角函数之间的关系以及导数关系
  20. 乌班图linux命令,乌班图Ubuntu常用命令及用法详解

热门文章

  1. CFIX(Samba)服务的使用
  2. 下载超过1GB的文件失败问题排查及解决
  3. 基于Android自带插入器的图形波动效果 --转载自李硕老师博客160303
  4. CSS 注释影响问题
  5. 转一个比较牛的JS Hook实现,基于Function prototype,能够勾住和释放任何函数
  6. count条件统计中为什么要加or null
  7. 十分钟学会 xmind 思维导图的使用
  8. android 3d 骰子,3D 骰子 - 完美的随身小骰子 - Android 应用 - 【最美应用】
  9. 从各大跨平台技术说起,我们真的需要虚拟 DOM 吗?
  10. 入坑 docsify,一款神奇的文档生成利器!