time sharing——>virtualization.

OS需要low-level machinery mechanisms and high-level intelligence。

前者是time or space sharing,how的问题。后者是scheduling policy,which的问题。

运行程序的操作系统提供的抽象成为进程。进程可以寻址的内存(地址空间)是进程的一部分。

Process Creation:程序最初以某种executable format驻留在磁盘上,1.OS首先从磁盘将code和static data的字节读入内存。最原始的OS采用一次性导入,现在OS仅在程序需要时加载代码和数据(延迟加载)。2.OS为程序的run-time stack分配内存,C将堆栈用于局部变量、函数参数和返回地址。4.OS还为heap分配部分内存。C中heap用于显示请求的动态分配数据(malloc申请,free释放),数据结构也需要堆。5.OS还执行一些其他初始化任务(尤其I/O相关),例如:默认每个进程有三个打开的文件描述符。6.跳转到main(),OS将CPU的控制权转移到新创建的进程上开始程序执行。

Process States

在从磁盘中读取或者从网络中等数据包时,OS识别P0未使用CPU而启动运行P1,I/O完成时将P0置于Ready状态,P1完成则启动P2.

Data Structures:1.例如:OS使用process list(每一条目称作process control block)记录三种状态进程的各种信息。对于已经停止的进程,register context保持其内容;当进程停止时,register将保存到该存储单元;通过将他们的值放回实际物理寄存器中,OS恢复该进程。这被称为context switch。

还有一个进程被创建时的初始状态和进程退出但没有被清理掉的最终状态(zombie state),final state非常有用,允许其他进程(通常父进程)检查返回代码判断是否执行成功(成功完成返回0)。完成后,父进程最后一次调用(例如wait())以等待子进程完成,并向OS表明他可以清除与now-extinct process相关的数据结构。

 

Process API:

1.fork.通过系统调用创建几乎完全相同的进程,根据初始参数或传入变量不同,两进程可以做不同的事。fork后,OS给新进程分配地址空间、寄存器和PC,将原来进程所有值(复制fork后的代码)复制进去,只有少数值不同。两进程的fpid不同在于“相当于链表,进程形成了链表,父进程的fpid(p 意味point)指向子进程的进程id, 因为子进程没有子进程,所以其fpid为0.”fork出错可能1、进程数达到上限,2、内存不足。

2.wait.父进程有时等待子进程做完工作是有必要的,使用wait()或waitpid()。

3.exec().

1和3的分离使得shell可以在fork后exec之前运行代码,改变即将运行代码的环境。

prompt> wc p3.c > newfile.txt      创建子进程且调用exec()之前,shell关闭标准输出流并打开newfile,任何输出都被发送到文件,重定向(<  >)是OS管理file descriptors。一般OS从0查找可用file descriptors,STDOUT FILENO可用且在调用open()时被赋值,后续都写入文件而不是屏幕。

管道也能实现相同作用。不过,一个进程的输出连接着inkernel pipe(例如队列)。自行查看(grep和wc)

signal()

ps

Virtualization的更多相关文章

  1. [WPF]WPF Data Virtualization和UI Virtualization

    这篇博客将介绍WPF中的虚拟化技术. 1. Data Virtualization 通常情况下我们说数据虚拟化是指数据源没有完全加载,仅加载当前需要显示的数据呈现给用户.这种场景会让我们想到数据分页显 ...

  2. Geneve: Generic Network Virtualization Encapsulation

    Earlier this year, VMware, Microsoft, Red Hat and Intel published an IETF draft on Generic Network V ...

  3. [Virtualization][SDN] VXLAN到底是什么 [转]

    写在转发之前: 几个月以前,在北大机房和燕园大厦直接拉了一根光钎.两端彼此为校园内公网IP.为了方便连接彼此机房,我做个一个VPN server在燕园的边界,北大机房使用client拨回.两个物理机房 ...

  4. Virtualization API之libvirt

    The virtualization API 之开源 libvirt探究 By Ruiy: libvirt supports Hypervisors(注,相关的hypervisors项目的权威网站已经 ...

  5. this computer does not support Intel Virtualization Technology (VT-x) .Haxm can'not be installed

    this computer does not support Intel Virtualization Technology (VT-x) .Haxm can'not be installed 本机不 ...

  6. 【转】How to Start Intel Hardware-assisted Virtualization (hypervisor) on Linux to Speed-up Intel Android x86 Emulator

    [转]How to Start Intel Hardware-assisted Virtualization (hypervisor) on Linux to Speed-up Intel Andro ...

  7. Connecting Docker for Cloud Services using SDN and Network Virtualization

     Abstract The explosive scale of container CPUs needs highly efficient network virtualization Chal ...

  8. RH133读书笔记(10)-Lab 10 Exploring Virtualization

    Lab 10 Exploring Virtualization Goal: To explore the Xen virtualization environment and the creation ...

  9. <Mastering KVM Virtualization>:第一章 了解Linux虚拟化

    本章为读者提供了Linux虚拟化中流行技术的深刻见解,以及相较于其他同类技术的优势特点.本书共有14章,囊括了KVM虚拟化中的各个方面,从KVM的内部构造开始,并包括了诸如软件定义网络(SDN),性能 ...

  10. <Mastering KVM Virtualization>:第三章 搭建独立的KVM虚拟化

    在第二章,你了解了KVM的内部结构:在本章中,您将了解如何将Linux服务器设置为虚拟化主机.我们正在讨论将KVM用于虚拟化并将libvirt作为虚拟化管理引擎. KVM开启了虚拟化并利用你的服务器或 ...

随机推荐

  1. js的事件流事件机制

    (1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: div -> body -> document IE 6.0: div ...

  2. 执行git命令时出现fatal: 'origin' does not appear to be a git repository错误

    在执行git pull origin master时出现: fatal: 'origin' does not appear to be a git repository fatal: Could no ...

  3. Python filter() 函数

    Python filter() 函数 描述 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为 ...

  4. 高通 MSM8K bootloader之一: SBL1

    MSM8K Boot Flow  转自:http://www.cnblogs.com/liang123/p/6325257.html            http://blog.csdn.net/F ...

  5. elasticsearch5.0以上版本及head插件的安装

    本文转载至:https://www.cnblogs.com/hts-technology/p/8477258.html(针对5.0以上版本) 对于es5.0以下的版本可以参考:https://www. ...

  6. Quartz 2.2 动态添加、修改和删除定时任务

    QuartzManager.Java 动态添加.修改和删除定时任务管理类 import org.quartz.CronScheduleBuilder; import org.quartz.CronTr ...

  7. PAT B1013

    PAT B1013 标签(空格分隔): PAT 解法:埃氏筛法 注意点: 1. 由于不知道第n个素数有多大,所以要用一个大的数组来储存结果. 2. 注意输出格式,末尾不能有多余空格 #include ...

  8. 一个redis因为关闭快照无法连接的BUG

    [2018-04-19 11:00:08,587: ERROR/MainProcess] consumer: Cannot connect to redis://127.0.0.1:6379/0: M ...

  9. Linux----Github环境搭建

    前面介绍了在Windows环境上安转GitHub环境,原本以为打包成jar,发布到Linux不需要再安转Git,但是因为我们使用了Config-Server配置中心,远程配置来启动,所以需要在Linu ...

  10. mysql 按类别之用一条SQL语句查询出每个班前10名学生数据

    select * from 学生信息表 a where 10 >  (select count(*) from 学生信息表 where 班级ID = a.班级ID and 班内名次 > a ...