2018-2019-1 20165203 《信息安全系统设计基础》第六周学习总结

2018-2019-1 20165203 《信息安全系统设计基础》第六周学习总结

教材学习内容总结

重要知识点

  • I/O:在主存和外部设备(例如磁盘存储器、终端和网络)之间复制数据的过程。
  • 输入操作:从I/O设备复制数据到主存。
  • 输出操作:从主存复制数据到I/O设备。

Unix I/O

  • Unix I/O:所有I/O设备都被模型化为文件,而所有的输入和输出都被当作对相应文件的读和写来执行,这种将设备优雅地映射为文件的方式,允许Linux内核引出一个简单、低级的应用接口,称为Unix I/O
  • 执行过程:
    • 打开文件:用描述符(内核打开文件返回的小的非负整数)来标识这个文件,程序只需记住这个描述符
    • 终端shell在每个进程开始时打开三个文件:标准输入(0)、标准输出(1)和标准错误(2)。
    • 改变当前的文件位置:对每个打开的文件,内核保持一个文件位置k(字节偏移量),初始为0。
    • 读写文件:读(从文件复制字节到内存),写(从内存复制字节到文件)
    • 关闭文件:关闭打开的文件释放它们的内存资源。

文件

  • 普通文件:包含任意数据。
    • 文本文件:只含有ASCII或Unicode字符的普通文件
    • 二进制文件:所有其他文件。
  • 目录:包含一组连接的文件。
  • 套接字:用来与另一个进程进行跨网络通信的文件。
  • 路径名:
    • 绝对路径名:以一个斜杠开始,表示从根节点开始的路径。
    • 相对路径名:以文件名开始,表示从当前工作目录开始的路径。

打开和关闭文件

  • [x] 打开或创建新文件:
  • open函数:格式如图所示
    1297630-20181104171329680-1409228961.jpg
    • filename:文件名
    • flags参数:
      1297630-20181104171353858-2016578469.jpg
    • mode参数:指定了新文件的访问权限位
  • [x] 关闭打开的文件:
  • close函数:格式如图所示
    1297630-20181104171513398-457469334.jpg

读和写文件

格式如图所示:
1297630-20181104171638251-1337569619.jpg

  • read函数:从描述符为fd的当前文件位置复制最多n个字节到内存位置buf。返回值表示的是实际传送的字节数量。
  • write函数:从内存位置buf复制至多n个字节到描述符fd的当前文件位置。

用RIO包健壮地读写

  • RIO包主要提供:
    • 无缓冲的输入输出函数:用于将二进制数据读写到网络和从网络读写二进制数据。
    • 带缓冲的输入函数:用于从文件中读取文本行和二进制数据。
  • RIO的无缓冲的输入输出函数:
    • rio_readn 和 rio_writen函数,使用格式如下:
      1297630-20181104171713444-163591871.jpg
  • RIO的带缓冲的输入输出函数:
    • rio_readlineb函数:从一个内部读缓冲区复制一个文本行,当缓冲区变空时,会自动地调用read重新填满缓冲区。
    • rio_readnb:rio_readn带缓冲区的版本。
    • rio_readinitb函数:从文件rp读出下一个文本行(包括\n),将它复制到内存位置usrbuf,并且用null字符来结束这个文本行,使用格式如图所示。
      1297630-20181105184511982-1726050798.jpg
  • RIO读程序的核心是rio_read函数

读取文件元数据

  • stat和fstat函数:检索到关于文件的信息(文件的元数据)。使用格式如图所示。
    1297630-20181104171735883-48016854.jpg

  • stat函数:以文件名作为输入,并填写stat数据结构中的各个成员。
    1297630-20181104171755227-2145234464.jpg

  • fstat函数:以文件描述符作为输入。

读取目录内容

以readdir系列函数来读取目录的内容。

  • opendir函数: 以路径名为参数,返回指向目录流的指针。使用格式如图所示
    1297630-20181104171816108-1583103106.jpg

  • readdir函数:调用返回指向流dirp中下一个目录项的指针,如果没有更多目录项则返回null。
  • closedir函数:关闭并释放其所有资源。

共享文件

内核用三个相关的数据结构来表示打开的文件

  • 描述符表:它的表项是由进程打开的文件描述符来索引。
  • 文件表:所有的进程共享这一张表。
    • v-node表:
      • 没有共享文件,并且每个描述符对应一个不同的文件。
      • 多个描述符也可以通过不同的文件表表项来引用同一个文件。

I/O重定向

工作过程:

  • 使用dup2函数:复制描述符表项oldfd到描述符newfd,覆盖描述符表表项new-fd以前的内容。使用过程如图所示。
    1297630-20181104171847790-1858906613.jpg

标准I/O及函数的使用

I/O包的总结:如图所示
1297630-20181104171903329-173671738.jpg

指导原则:

  • 只要有可能就使用I/0。
  • 不要使用scanf或rio_readlineb来读二进制文件。
  • 对网络套接字的I/O使用RIO函数。
  • 建议在网络套接字上不要使用标准I/O函数来进行输入和输出,而要使用健壮的RIO函数。

教材学习中的问题和解决过程

问题:当学习到教材635页时,看到如图的fork,不太懂fork是什么意思?

解决方案:自己查阅了一下百度,看到了关于fork()函数的资料。它的功能是创建一个子进程。
父进程调用fork()系统调用,然后陷入内核,进行进程复制,如果成功:

1,则对调用进程即父进程来说返回值为刚产生的子进程pid,因为进程PCB没有子进程信息,父进程只能通过这样获得。

2,对子进程(刚产生的新进程),则返回0,

这时就有两个进程在接着向下执行

如果失败,则返回0,调用进程继续向下执行

------详情请见fork函数的介绍

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

错题1:有关缓存的说法,正确的是()
A .LRU策略指的是替换策略的缓存会选择最后被访问时间距现在最远的块
B .不同层之间以字节为传送单元来回复制
C .缓存不命时,决定哪个块是牺牲块由替换策略来控制
D .空缓存的不命中叫冲突不命中

答案:AC
解析:我漏选了C,教材P423中介绍了决定哪个块是由缓存的替换策略来控制的。
例如随机替换策略的缓存会随机选择一个牺牲块。
LRU替换策略的缓存会选择最后被访问的那个块。

错题2:有关RAM的说法,正确的是()
A .SRAM和DRAM掉电后均无法保存里面的内容。
B .DRAM将一个bit存在一个双稳态的存储单元中
C .一般来说,SRAM比DRAM快
D .SRAM常用来作高速缓存
E .DRAM将每一个bit存储为对一个电容充电
F .SRAM需要不断刷新
G .DRAM被组织为二维数组而不是线性数组

答案:ACDEG
解析:我漏选了C和D。
SRAM比DRAM要快,成本也高。SARM也用作高速缓存存储器,既可以在芯片上也可以在芯片下。

其他(感悟、思考等,可选)

本周主要学习了Unix I/O模型及它的系统级函数,了解了Linux内核的三个数据结构及其文件的打开方式。第一次接触了描述符的概念,且描述符的表项指向打开文件表中的表项,而打开文件表中的表项又指向v-node表中的表项。还了解标准I/O库,经过书中的了解,标准I/O库的确是优于I/O库的选择。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周200/2002/220/20
第二周300/5002/418/38
第三周500/10003/722/60
第四周300/13002/930/90

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难,软件工程 估计方法

参考资料

  • 《深入理解计算机系统V3》学习指导

转载于:https://www.cnblogs.com/20165203-xyx/p/9904790.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 使用VI命令怎么删除输入内容,linux系统vi编辑器常用命令及使用方法。

在linux系统中编辑文档我们常用到vi编辑器。vi编辑器,通常称之为vi,是一种广泛存在于各种UNIX和Linux系统中的文本编辑程序。它的功能十分强大,但是命令繁多,不容易掌握,它可以执行输出、删除、查找、替换、块操作等众多文本操作&…

在react中使用svg的各种骚姿势

开头先抛个可供参考的项目ts-react-webpack4, 或脚手架steamer-react-ts 优势 SVG可被非常多的工具读取和修改(比如vscode)不失真, 放大缩小图像都很清晰SVG文件是纯粹的XML, 也是一种DOM结构使用方便, 设计软件可以直接导出 兼容性 上一张兼容性图表, 或到caniuse.com查看 …

3.2自定义方法

方法是类的一种行为,方会使我们的代码容易修改,方便阅读,实现封装和重用。比如前面使用的很多.net定义好的类的方法,当然我们也可以自定义方法。 3.2.1定义方法 语法: 访问修饰符 返回类型 方法名(参数列表) &#xff…

[Electron]仿写一个课堂随机点名小项目

自从前几个月下了抖音,无聊闲暇时就打会打开抖音,因为打开它有种莫名其妙打开了全世界的感觉... 无意中看到这个小视频:随机点名 于是仿写了一个课堂点名小项目,算是对Electron的一个简单的认识,有时间再深入。 项目…

linux redis安装使用,linux安装redis

Linux(CentOS)中Redis介绍、安装、使用【一篇就够】2018-05-13 13:36:16 sjmz30071360 阅读数 1590更多分类专栏: redis版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。一、介绍Redis is…

用three.js写一个简单的3D射门游戏

这个小游戏很简单,一共由3个部分构成。1个平面(球场),1个球体(足球)还有一个立方体(球门)。 上个图给你们感受一下简陋的画风(掘金最高上传5M图片,原来图片都…

100份Spring面试问答-最终名单(PDF下载)

上次更新时间:2019年2月11日 这是有关Spring框架的一些最重要问题的摘要,在面试或面试测试过程中可能会要求您回答这些问题! 您无需担心下一次面试的机会,因为Java Code Geeks在这里为您服务! 您可能会被问到的大多数…

3.1 unittest简介

3.1 unittest简介 前言 熟悉java的应该都清楚常见的单元测试框架Junit和TestNG。python里面也有单元测试框架-unittest,相当于是一个python版的junit。python里面的单元测试框架除了unittest,还有一个pytest框架,这个用的比较少,后面有空再继…

织梦其他模型使用联动类型地区联动

官方模型的联动类型只能模型是在【独立模型】或者官方默认的【分类信息】模型下使用,其他模型下使用无效,我们来让联动类型支持所有模型。 添加联动地区类型字段 内容模型管理 - 文章模型(或者其他模型) - 添加新字段 字段名称 和 数据类型 千万别搞错了…

使用IntelliJ IDEA进行热部署

最近,在PrimeFaces论坛PrimeFaces IDE Poll中进行了投票,以投票赞成用于开发PrimeFaces应用程序的最佳IDE。 最多人投票支持NetBeans。 NetBeans和Eclipse是免费的IDE。 我最喜欢的IDE IntelliJ IDEA Ultimate不是免费的,我认为这就是为什么在…

创梦天地关嵩:借力腾讯云,打造文娱新生态——云+未来峰会回顾

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 今年腾讯云未来峰会主题的关键词是“焕启”,这是包含无限希望的两个字,让人倍感振奋。“焕启”是什么意思?在我的理解中,“焕启”本身就是激活,激…

【缓存清理工具】缓存清理软件_电脑缓存清理软件

产品介绍 有很多种比如来自网页和windows等,缓存如果不经常清理会使你的机器运行速度变慢,缓存清理工具可以帮你最多程度的清理垃圾文件而且速度也很快,有了它的帮助让你爱机清理彻底,运行更加顺畅!主要能清理:所有应…

c语言转义字符空格符号,C语言 转义符\t占用几个空格

这个问题,在你学习编程过程中可能会考虑到,有时为了字节对齐而使用转义符中\t,但是到底\t占用几个空格呢?下面我们首先通过程序来体验下,然后在总结#include int main(){printf("123456\t123\t45\n");printf("12\t…

[探索] 利用promise做一个请求锁

在最近开发小程序的过程中,遇到一个需求,就是请求的时候header需要带上accessToken, accessToken是通过登陆接口返回的参数,可能会出现过期的情况,则需要重新登陆,所以每次加载小程序都会进行一次本地储存的accessToke…

【Python】[02]初识Python

Python3的下载安装 根据书上的推荐,我将学习和使用Python3版本,从www.python.org网站,根据对应的操作系统,下载合适的Python版本即可 我的是64位系统,所以我选择的是Windows x86-64 executable installer 下载完成后双…

自己写了一个多行文本溢出文字补全的小库, 说不定你会用得到的

有些时候产品会有这么个需求,希望给文章或者帖子给一个摘要,最多3行,或者其它行数,超出3行会补上...。当然这种很简单,用css可以搞定。但是遇上要求多点的产品,希望补上的是...查看全文,这样的话…

C语言简单程序情话,给你一份程序员的“科技情话”,赶在双十一前脱单吧

说起程序员很多人第一印象都是呆板木讷但你们不知道程序员的浪漫花样给你一份程序员的“科技情话”赶在双十一前,和你暗恋的人表白吧~程序员的情书Void missing_you()For(timemeet_you;;time)Missing_you()自从遇见你,就没有一刻不想你-----------------…

记录好用的软件

【摘要】 平时用的很舒服的软件,做个记录,一直更新。 【Snipaste截图】 一般都会用QQ的截图工具,但是现在很少登QQ,Snipaste截图也很好用,只需要按F1即可截图。 【ScreenToGif】 ScreenToGif可以录制屏幕生成Gif文件。…

阿里90后工程师,如何用AI程序写出双11打call歌?

来自阿里巴巴的90后工程师芦阳,用业余时间开发了一套人工智能作词程序——名字叫做MusicGo,这个程序经过芦阳的“喂养”和设定,可以自己写饶舌歌曲。芦阳加入菜鸟也才仅仅四个月,这是他第一次参加双11备战。作为一名新员工&#x…

编程历史

编程历史: 编程语言的历史早于真正意义的计算机的出现。19世纪就有"可编程的"织布机和钢琴弹奏装置出现,它们都是领域特定语言(DSL)的样例。 从1951年2014年,人类一共发明了256种编程语言,每一种语言的出现都带有某些新…