BSD学习(BSD系统的历史和目标)
- UNIX系统的历史
unix系统的发展历程大概经历以下几个阶段:
- 贝尔实验室(Bell Laboratories)阶段,该实验室发明了UNIX
- 加州大学伯克利分校(University of California at Berkeley简称UC Berkeley)的计算机系统研究小组(Computer Systems Research Group,简称CSRG),CSRG赋予了UNIX系统虚拟内存机制和TCP/IP参考实现;
- FreeBSD项目组,NetBSD项目组和OpenBSD项目组阶段,这几个项目组继承了CSRG所开创的工作。
- 作为Apple公司OSX系统核心的Darwin操作系统阶段,这个操作系统是以FreeBSD操作系统开发出来的。
UNIX系统的第一个版本诞生于1969的贝尔实验室,这个版本是Ken Thompson的个人研究项目。不久以后Dennis Ritchie也加入了进来,他不仅为系统做出了系统贡献,还发明了c语言,unix系统后来用C语言进行重写,只留下少数的汇编语言。
这个版本的unix系统文件系统的基本构成,采用了一个用户进程作为命令行解释器的思想,文件系统的通用结构,以及许多别的系统特性都直接源于他。此外,UNIX还融入了许多其他操作系统的思想,比如MIT(
Massachusetts Institute of Techology)的CTTS系统。UNIX里的创建进程的fork操作则源于伯克利的GENIE操作系统。UNIX让用户不用花费多大的开销就能创建进程,于是每条命令就是一个进程,而不会要命令作为过程调用来执行。
UNIX系统的第一批重要的版本是贝尔实验室Research小组开发的系统。此时的UNIX系统与当时其他的系统重要的区别有:
- UNIX采用高级语言(c语言)编写。
- UNIX以源代码的形式发布。
- UNIX系统有强大的原语(primitive),它们往往只会在那些要依托更为昂贵硬件设备才能运行的操作系统中才能看到。
此外UNIX的另一个重要特点是,它一开始就以源码的形式从贝尔实验室向其他研究机构提供。使其他研究机构也能够深入地研究和修改该系统。这就是UNIX能够很容易的吸收新思想,从而根据时代变化作出相应的调整。从而使UNIX系统得到最新的思想和技术的补充。UNIX在不断演化过程中远远超越他的初始版本。
UNIX的第三个重要特点是他赋予了个人用户的一种能力,即可以并发的运行多个进程,并将这些进程关联起来构成命令的管道线(pipeline)。
在UNIX的第七版之后,USG(UNIX Support Group)的第一个对外发布版本是1982年的UNIX System III(简称System III)。该系统融合了第七版,32V以及Research小组以外以他机构所开发的UNIX系统的特点。USG演变为USDL(UNIX System V,Release4) 向System V引入了调页机制(paging)。在1987年发布了UNIX SVR3(UNIX System V,Release 3)。这个版本包括流机制(streams)。
除了贝尔实验室和AT&T UNIX开发小组之外,最具影响力的研究机构要算加州大学伯克利分校。伯克利的软件叫做BSD(Berkeley Software Distributions,伯克利软件发布)。伯克利VAX UNIX的第一项工作是在32V版本上增加了虚拟内存(virtual memory),请求调页机制(demand paging)和页面替换技术(page replacement)。4BSD的重点是为DARPA的Internet网络协议TCP/IP提供支持。
2.BSD和其他系统
CSRG在BSD中不仅融入了UNIX系统的技术,也吸收了其他操作系统的思想。4BSD的终端驱动程序有许多功能来源于TENEX/TOPS-20。作业控制(job control)这一概念(不是实现)源于TOPS-20和MIT的ITS(Incompatible Timessharing System)。最早在4.2BSD上提出,而最终在4.4BSD上实现的虚拟内存接口,是以受限在TENEX/TOPS-20上出现的文件映射和页面级接口为基础。FreeBSD目前的虚拟内存系统则借鉴了Mach系统--4.3BSD的一个分支。在CSRG的设计中,搞笑总是被当做一个首要的因素而给予优先考虑。而其他的系统也借鉴了4BSD的特色比如:
- 作业控制
- 可靠信号
- 多个文件访问权限组
- 文件系统接口
4BSD套接口进程间通讯机制在设计上具有良好的可移植性。
公共域区处理软件包(public-domain time-zone-handing package)就是一个由用户群开发的出工具软件的现实例子,4.3BSD Tahoe 采用了这个软件包。
1989年6月,BSD的连网代码和支持工具发布,它叫做Networking Release 1,这是伯克利第一次提供可以自由重新发布的代码。这次的许可证条款相当慷慨,他容许以源代码或者二进制代码的形式发布已修改或者未修改过的代码,而且不用向伯克利支付费用,唯一的要求是,保持源代码文件中版权声明不动,并且在采用这些代码的产品文档中说明该产品包含了加州大学和许多无私奉献者提供的代码。
BSD学习(BSD系统的历史和目标)的更多相关文章
- 正确学习Linux系统的5个建议
摘要: 最近几年Linux系统应用越来越广泛,以至于很多人开始热衷学习Linux.但是我们都是从小都是学习windows系统长大的,从windows 98到现在的windows 10,而根据学习win ...
- 第三次随笔--安装虚拟机及学习linux系统初体验
第三次随笔--安装虚拟机及学习linux系统初体验 ·学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统 首先按照老师的提示步骤进行VirtualBox虚拟 ...
- 深度学习 + OpenCV,Python实现实时视频目标检测
使用 OpenCV 和 Python 对实时视频流进行深度学习目标检测是非常简单的,我们只需要组合一些合适的代码,接入实时视频,随后加入原有的目标检测功能. 在本文中我们将学习如何扩展原有的目标检测项 ...
- 如何学习Android系统源码(转)
一. Android系统的源代码非常庞大和复杂,我们不能贸然进入,否则很容易在里面迷入方向,进而失去研究它的信心.我们应该在分析它的源代码之前学习好一些理论知识,下面就介绍一些与Android系统相关 ...
- 与你们分享我学习linux系统的三大妙招
一说到linux,我们就自然会想到企业服务器系统,目前市场上的网络设备都是使用linux内核操作系统,一些网络服务器也是使用linux操作系统下面的服务搭建实现的:目前操作系统这块也基本被linux占 ...
- Linux学习-->linux系统在移动硬盘的安装
由于自己看了一些文章和linux的好奇,想来一窥Linux的奥秘,因此自己准备学习使用Linux系统,这里记录下自己的安装过程,方便以后自己重装系统时进行查阅. 参考的书籍是鸟哥的<Linux私 ...
- 应届毕业生如何通过学习Linux系统选择一份高薪职业
2017年全国高校毕业生人数795万,史上"更难就业季"大学生就业形势,再加上出国留学回来的约30万以及没有找到工作的往届毕业生,预计将有1000多万大学生同时竞争. 如果我们不是 ...
- 给学习Linux系统小白的两三个建议
前段时间看过一个针对国内Linux使用情况的调研表,有了不少感慨.现在听说过linux,会一点linux基本操作的人多如牛毛,然而真正能用linux做一点事情的确少之又少.无论是公司还是学校,办公基本 ...
- 技术宅学习Linux系统还是很有前途的
老实说,我之所以入了Linux的坑,纯粹只是为了追我现在的男朋友,也就是技术宅.如果不是为了追我男朋友的话,我估计我这辈子都不会去接触linux.好吧,今天写一写过往事情,也是为了怀念当初追男友的一些 ...
随机推荐
- Yii2 实现修改密码功能
YII2对密码加密生成的结果是不同的,即用相同的初始密码在不同时间得到的加密结果不同,所以我们不能用常用的方法去验证密码是否正确(将密码加密后与数据库中的密码相比较).YII2有自己的加密以及密码验证 ...
- BZOJ-1002 轮状病毒 高精度加减+Kirchhoff矩阵数定理+递推
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3543 Solved: 1953 [Submit][Statu ...
- @RestController注解下返回到jsp视图页面(转)(转)
这个问题我也遇到过,下面的方法可以试试 蓝萝卜blu @RestController注解下返回到jsp视图页面 spring4.1中添加了@RestController注解很方便,集成了@Respon ...
- TYVJ1000 A+B problem [存个高精模板]
A+B Problem! 通过模拟我故乡非洲的计算方式,我们很快可以解决这道题. #include<iostream> #include<cstdio> #include< ...
- JAVA中的数组是对象吗?
public class Main{ public static void main(String[] args) { int a[]={1,9}; //Object obj=new int[10]; ...
- 两个大的整数的运算(java)
import java.math.BigInteger; public class BigInt { BigInteger m1; BigInteger m2; BigInteger m3; BigI ...
- C++处理一个动态规划的问题
嗯哼,别人问的问题,看的我也头晕,百度了一下动态规划,看了看才想起来该怎么做,今天写了写代码,实现了~ 要求是递归,动态规划,想了想这种方法也是最简单的~ 所谓动态规划:把多阶段过程转化为一系列单阶段 ...
- Android:View中的performClick()触发条件
http://blog.sina.com.cn/s/blog_70ae1d7b0102v7uk.html 先看看performClick()源码: public boolean performCl ...
- 在微信中实现app软件中账号注册的功能实现
利用写好的接口url地址访问 输入手机号,接收手机验证码 <span class="accept" >点击获取验证码</span> $(".acc ...
- memcache 开发版
memcache安装,如果是用xampp,一定要下载开发版本 解压开发包,将其中的include目录复制到应用的lampp目录下 tar -zxvf xampp-linux-devel-1.7.2.t ...