Pintos调试心得
- 格式:docx
- 大小:295.43 KB
- 文档页数:8
Server 1设置ip为202.221.176.1 子网掩码255.255.255.252 网关202.221.176.1Router0:#conf t#hostname Brouter#int f0/1#ip address 61.186.202.33 255.255.255.248#ip nat outside#no shutdown#int f0/0#ip address 192.168.2.1 255.255.255.252#ip nat inside#no shutdown#ip nat pool 123 61.186.202.35 61.186.202.36 netmask 255.255.255.248#access-list 1 deny host 192.168.40.2#access-list 1 permit any#ip nat inside source list 1 pool 123 overload#ip router 0.0.0.0 0.0.0.0 61.186.202.34#ip router 192.168.0.0 255.255.0.0 192.168.2.1#ip nat inside source static tcp 1925.168.1.2 80 61.186.202.33 1500#line vty 0 4#password 123456#login#enable password 123456#exit#writeRouter1:#conf t#int f0/1#ip address 61.186.202.34 255.255.255.248#no shutdown#int f0/0#ip address 202.221.176.6 255.255.255.252#no shutdown#ip router 0.0.0.0 0.0.0.0 202.221.176.5#router rip#version 2#network 61.0.0.0#network 202.221.176.0#exitWriteRouter2:#conf t#int f0/0#ip address 202.221.176.5 255.255.255.252#no shutdown#int f0/1#ip address 202.221.176.1 255.255.255.252#no shutdown#router rip#version 2#network 202.221.176.0#exit#writeMultiayer switch0:#conf t#hostname DISswitch#vlan 10#name renshi#int vlan 10#ip address 192.168.10.1 255.255.255.0#vlan 20#name caiwu#int vlan 20#ip address 192.168.20.1 255.255.255.0#vlan 30#name xiaoshou#int vlan 30#ip address 192.168.30.1 255.255.255.0#vlan 40#name shengchan#int vlan 40#ip address 192.168.40.1 255.255.255.0#vlan 100#name webserver#int vlan 100#ip address 192.168.1.1 255.255.255.0#vlan 200#name manger#int vlan 200#ip address 192.168.3.1 255.255.255.0#int f0/1#no switchport#ip address 192.168.2.2 255.255.255.0#int f0/2#switchport mode access#switchport port-security#switchport port-security maximum 1#switchport port-security mac-address 00d0.d330.a260 #no shutdown#switchport access vlan 100#int f0/3#switchport mode access#switchport access vlan 200#int range f0/4-5#channel-group 1 mode on#switchport trunk en dotl#switchport mode trunk#int range f0/6-7#channel-group 2 mode on#switchport mode access#switchport access vlan 30#int range f0/8-9#channel-group 3 mode on#switchport mode access#switchport access vlan 40#int port-channel 2#switchport mode access#switchport access vlan 30#int port-channel 3#switchport mode access#switchport access vlan40#line vty 0 4#password 123456#login#enable password 123456#exit#writeSwitch0:#conf t#hostname RS/CWswitch#vlan 10#int vlan 10#ip address 192.168.10.3 255.255.255.0#vlan 20#int range f0/1-10#switchport mode access#switchport access vlan 10#int range f0/11-20#switchport mode access#switchport access vlan 20#int range f0/23-24#channel-group 1 mode on#switchport mode trunk#int port-channel 1#switchport mode trunk#line vty 0 4#password 123456#login#enable password 123456#exit#write#conf t#hostname XSswitch#vlan 30#int vlan 30#ip address 192.168.30.3 255.255.255.0#int f0/1-24#switchport mode access#switchport access vlan 30#int f0/23-24#channel-group 2 mode on#int port-channel 2#switchport mode access#switchport access vlan 30#line vty 0 4#password 123456#login#enable password 123456#exit#writeSwitch2:#conf t#hostname SCswitch#vlan 40#int vlan 40#ip address 192.168.40.3 255.255.255.0#int f0/1-24#switchport mode access#switchport access vlan 40#int f0/23-24#channel-group 3 mode on#int port-channel 3#switchport mode access#switchport access vlan 40#line vty 0 4#password 123456#login#enable password 123456#exit#writeIp 为192.168.1.2 子网掩码255.255.255.0网关192.168.1.1Pc0Ip 为192.168.10.2 子网掩码255.255.255.0网关192.168.10.1Pc1Ip 为192.168.20.2 子网掩码255.255.255.0网关192.168.20.1Pc2Ip 为192.168.30.2 子网掩码255.255.255.0网关192.168.30.1Pc3Ip 为192.168.40.2 子网掩码255.255.255.0网关192.168.40.1Pc4Ip 为192.168.3.2 子网掩码255.255.255.0网关192.168.3.1。
pintos实验报告Pintos实验报告引言Pintos是一个教学操作系统,用于教授操作系统设计与实现的课程。
通过Pintos,学生可以亲自动手实现一个简单的操作系统,并深入了解操作系统的基本原理和内部机制。
本文将介绍我在学习Pintos过程中的实验经历和心得体会。
实验一:线程在Pintos的第一个实验中,我们学习了线程的概念和实现。
通过实现线程调度器,我们深入了解了线程的创建、切换和销毁等操作。
在这个实验中,我遇到了许多挑战,例如如何正确地管理线程的状态以及如何处理线程间的竞争条件。
通过仔细阅读Pintos的文档和源代码,我逐渐理解了线程的工作原理,并成功地完成了实验。
实验二:用户程序实验二主要涉及用户程序的加载和执行。
在这个实验中,我们需要实现一个简单的用户程序执行器,并学习如何在用户程序和内核之间进行有效的交互。
通过这个实验,我更加深入地了解了操作系统内核和用户程序的关系,并学会了如何将用户程序加载到内存中并执行。
实验三:文件系统实验三是Pintos的一个重要实验,涉及文件系统的设计和实现。
在这个实验中,我们需要实现一个简单的文件系统,并学习如何管理文件和目录。
这个实验对我来说是一个巨大的挑战,因为我需要理解文件系统的底层数据结构和算法,并且确保文件系统的正确性和性能。
通过这个实验,我不仅学到了文件系统的设计原理,还学会了如何进行文件的读写和目录的管理。
实验四:虚拟内存实验四是Pintos的最后一个实验,也是最具挑战性的一个实验。
在这个实验中,我们需要实现虚拟内存的功能,包括页面置换和内存映射等。
这个实验要求我们深入理解操作系统的内存管理机制,并学会如何处理页面置换和内存映射的复杂问题。
通过这个实验,我对操作系统的内存管理有了更深入的理解,并学到了如何优化内存使用和提高系统性能。
总结通过学习Pintos,我对操作系统的设计和实现有了更深入的了解。
通过实验的实践,我不仅掌握了操作系统的基本原理和内部机制,还学会了如何解决实际的系统设计和实现问题。
---> 13 throws_an_exception()1415 calling_things()/home/wesm/code/pydata-book/examples/ipython_bug.py inthrows_an_exception()7 a = 58 b = 6----> 9assert(a + b == 10)1011def calling_things():AssertionError:In [3]: %debug> /home/wesm/code/pydatabook/examples/ipython_bug.py(9)throws_an_exception()8 b = 6----> 9assert(a + b == 10)10ipdb>一旦进入调试器,你就可以执行任意的Python代码,在每个堆栈框架中检查所有的对象和数据(解释器会保持它们活跃)。
默认是从错误发生的最低级开始。
通过u(up)和d(down),你可以在不同等级的堆栈踪迹切换:ipdb> u> /home/wesm/code/pydatabook/examples/ipython_bug.py(13)calling_things()12 works_fine()---> 13 throws_an_exception()14执行%pdb命令,可以在发生任何异常时让IPython自动启动调试器,许多用户会发现这个功能非常好用。
用调试器帮助开发代码也很容易,特别是当你希望设置断点或在函数和脚本间移动,以检查每个阶段的状态。
有多种方法可以实现。
第一种是使用%run和-d,它会在执行传入脚本的任何代码之前调用调试器。
你必须马上按s(step)以进入脚本:In [5]: run -d examples/ipython_bug.pyBreakpoint 1 at /home/wesm/code/pydata-book/examples/ipython_bug.py:1NOTE: Enter 'c' at the ipdb> prompt to start your script.> <string>(1)<module>()ipdb> s--Call--> /home/wesm/code/pydata-book/examples/ipython_bug.py(1)<module>()1---> 1def works_fine():2 a = 53 b = 6然后,你就可以决定如何工作。
p-unit 测试心得或许我们已经习惯了使用 JUnit 来写单元测试来保证代码质量(我也一直这么做),但可能经常碰到这样的问题:1.程序多线程下正确性如何?2.如何测试程序的性能?3.当有多个方案可以选择时,技术上如何比较不同方案的性能?对于问题 1,我们或许听天由命?或是凭借人工分析,或是根据用户反馈?很多软件单线程下的单元测试覆盖率相当高,从而保证了代码的健壮性。
然而多线程测试时常被忽略,这并不代表多线程测试不重要,相反,修正一个用户报告的多线程 BUG 往往比单线程的要高出很多,因为测试案例经常不是 100% 可重现的。
这更要求程序员在开发阶段充分的重视。
目前多线程单元测试力度不够的一个重要原因是没有一个像 JUnit 那样易用的测试工具,另外重复写测试案例往往不被程序员接受。
对于问题 2,一个成熟的关心性能的产品往往有一个性能测试平台。
这个测试平台应该关注的是测试业务逻辑本身,而无需关心如何运行测试案例。
你是否为写这样的测试平台痛苦过?以及花费时间在产生一些直观的报表上面?对于问题 3,我们往往写一个原型来比较不同产品之间的性能,如何比较执行速度和内存消耗?或是选择最适合你的虚拟机?p-unit 就是这么一款开源的性能测试软件,它能帮助你很好的解决上述问题。
p-unit 可以:∙多线程支持:同一个测试案例可以单线程执行,也可以多线程执行,测试案例开发者只需写一套测试案例。
∙参数化测试案例:很多测试案例,需要测试同一功能在不同数量级上的性能表现。
∙不同虚拟机性能测试:只需指定虚拟机路径,即可测试同一个测试案例在不同虚拟机上的表现,报表上可以非常直观显示性能差别。
∙事件机制构架:punit 是基于事件机制构架的,如果用户想定制报表,只需实现事件响应器,并注册该响应器到 punit 核心即可。
多线程执行测试案例在了解如何多线程执行测试案例之前,我们先了解一下如何利用 p-unit 单线程执行测试案例。
Pintos安装步骤by 某某一、bochs安装之前要配置GCC1.执行这一步的时候./configure --enable-debugger --enable-disasm,把代码写成了如下图所示,所以总是通不过去。
2.总算上面那一步通过了,make又提示:make: *** 没有规则可以创建目标“install”。
停止。
,去网上百度又百度,论坛里说要装个叫GCC的编译器。
于是我去下载。
3.在/2012/0409/73535.html找到了能安装GCC的方法了。
方法二是可用的:在终端输入sudo apt-get install build-essential,就安装成功了,再用gcc--version 命令来查看了下版本,但是又出现gcc-verison: command not found,= =简直可以急死个人了。
4.又去百度,百度经验里面居然有解决办法(说明出现这个错误的人应该还是蛮多的),他的第一步让我用在命令行输入su,回车。
然后输入root 用户密码(注意,屏幕上不显示),回车,登入root 用户。
然后在命令行输入:gedit /etc/profile,回车。
这样就打开了一个文本编辑器对profile 文件进行编辑。
可惜的是,尼玛我根本打不开这个gedit,所以又出现** (gedit:9815): WARNING **: 连接已关闭5.嘿嘿,根据我多年的经验,我直接进入home/wonder(这里是我的用户名)/,进去了之后点击查看隐藏的文件,终于,这个文件粗线了!!!打开并且在文件的最末一行,添加PATH=$PATH:/sbin,然后保存并关闭文件。
注意,务必记得保存文件。
6.在命令行继续输入source /etc/profile ,回车,使刚才更改后的配置文件生效。
注意,etc 前面的/ 不能少。
7.最后我悲剧了,我就想试试按照百度经验上说的那行命令执行了shutdown -h now,就眼睁睁的看着电脑自动关机了⊙﹏⊙b汗。
ccna实训心得体会篇一:CCNA培训心得CCNA培训心得杨绍松转眼间,CCNA培训班的课程已经结束了,经过10天的学习,我想我与我的几位同事都有了不同的但很大的收获。
对于我个人,我认为这次培训班举办的非常有意义,非常有必要,因为它不仅让我充实了更多网络方面的理论知识,更让学习到了CISCO交换机与路由器理论方面的知识。
无论是从课上到课下,从听课到交谈,还是从所听到所闻,每时每刻、每一堂课,都让我有莫大的收获,现将这10天来的心得体会总结如下:(1)充实网络方面理论知识网络一直是我非常喜欢的领域,以致于我经常利用业务时间翻阅网络方面的书籍。
在自学计算机网络时,难免有很多困惑我的地方。
这次培训让我以前困惑我的知识点变得明朗了,同时我也学到了以前不曾接触的知识。
现只针对网络理论知识方面的学习总结以下几点:1、之前我对IOS七层模型中的表示层与会话层一直不是很了解,只知道这两层的存在,但是不知道这两层的功能与作用。
通过这次培训我不仅对这两层有了一个全新的认识,对整个IOS模型也有了更深层次的理解。
2、帧中继网络在此之前对于我来说一直都是一个盲点,之前也没有主动的了解它,因为我一直把这种网络技术当成一种陈旧的技术。
在这个培训中,通过老师的介绍我才知道原来这项技术是非常实用的。
而且也了解了这项网络技术的工作原理,学会了他的构建方法与维护技术。
3、常用的路由协议有很多,之前只了解静态路由、RIP、OSPF这几个路由协议,在路由器上也是做一些简单的配置,EIGRP是我这次培训的最大收获。
得到最大收获的同时,我也再次温习了RIP、OSPF等路由选择协议,之前总以为OSPF 配置命令中的是反掩码,现在才知道其真实的意义是通配符。
4、现在的我感觉出了以前的我的那种青涩,对任何事物的了解一定在做到知其然,又知其所以然。
之前的我对很多东西的了解只做到了知其然,而不知其所以然。
例如:配置CISCO设备时最常用的保存配置的命令write,之前只知道这个命令是保存配置用的,可是不知道它的工作机制。
《操作系统课程设计》Pintos及实验环境简介黄伯虎内容Pintos简介实验环境简介Pintos简介What’s Pintos?Pintos是Standford大学为操作系统课程专门开发的一个基于80x86架构的简单操作系统框架(A simple operating system framework)。
特点:支持:内核线程;装载和运行用户程序;文件系统。
但这些功能都只是以一种非常简单的方式实现的。
我们能做的工作:①从上述三个方面完善该系统②添加虚拟内存的实现Pintos文档理论上来讲,Pintos是可以运行在IBM兼容PC上的,但实际中为了开发和调试的方便,我们常让Pintos运行在虚拟机上(如:Bochs/QEMU/VMWare)。
同时因为Pintos是在UNIX下用C语言编写出来的,因此其开发环境也应为类UNIX系统。
当前使用较多的是Linux系统,Linux发行版可自由选择,我们的实验环境使用的是Ubuntu 12。
Pintos, Bochs, UnuntuPintosBochs Ubuntu运行运行开发(修改/编译/调试)Pintos 安装手册演示实验系统用户(xd)密码:123456 root用户密码:654321Pintos中一共有4个ProjectProject1: ThreadsAlarm Clock; Priority Scheduling; Advanced Scheduler Project2: User ProgramsProcess Termination Messages; Argument Passing; SystemCalls; Denying Writes to ExecutablesProject3: Virtual MemoryPaging; Stack Growth; Memory Mapped Files; AccessingUser MemoryProject4: File SystemsIndexed and Extensible Files; Subdirectories; Buffer Cache;Synchronization实验过程Step1通过讲解、阅读文献理解基本原理和任务Step2设计方案,并修改Pintos源代码Step3编译,调试,测试Step4验收,撰写报告Pintos源代码结构下载地址:/07au-cs140/pintos/pintos.tar.gz打开../pintos/src/,你会看到如下目录树:。
华东师范大学软件学院实验报告实验课程:操作系统实践年级:大二实验成绩:实验名称:Pintos-User Programs 姓名:实验编号:学号:实验日期:2018/12/27指导教师:组号:实验时间:4学时一、实验目的当前, 我们已经完成了pintos 的第一部分(熟悉了其基础结构和线程包), 现在是开始处理系统中允许运行用户程序的部分的时候了。
基本代码已经支持加载和运行用户程序, 但不能加载和运行或交互性。
在此项目中, 我们将使程序能够通过系统调用与操作系统进行交互。
我们将在"userprog" 目录中进行工作, 但我们也将与pintos 的几乎所有其他部分进行交互。
具体目的如下:(1)了解Pintos操作系统的功能流程及内核的软件工程结构。
(2)通过Pintos操作系统内核的剖析,了解现有Pintos操作系统在处理用户程序方面中存在的参数传递问题,有效解决其参数传递的问题。
(3)通过Pintos内核剖析,了解其中断处理的机制,学会操作系统中断功能的编写方法。
(4)了解现有Pintos操作系统的系统调用功能,根据其中断机制,完善系统调用功能,使Pintos系统具有处理用户中断请求的功能。
(5)通过Pintos内核剖析,解决现有Pintos操作系统中存在的进程终止时缺少终端提示的问题。
(6)通过Pintos内核剖析,解决现有Pintos操作系统中存在的运行文件禁止写操作的问题。
二、实验内容与实验步骤实验内容如下:(1)在分析内核的基础上,对Pintos操作系统的参数传递问题提出有效的策略,设计算法,分步跟踪和调试,通过实践,有效解决参数传递问题,并对实验结果进行分析。
(2)通过Pintos操作系统内核的剖析,了解其中断处理的机制,在此基础上,完善Pintos的系统调用功能,设计算法,分步跟踪和调试,通过测试分析完善的系统调用功能。
(3)在分析内核的基础上,对现有Pintos操作系统进行完善,增加进程终止的终端提示功能,设计算法,分步跟踪和调试,通过实践,验证终端提示功的有效性。
pintos实验报告《Pintos实验报告:探索操作系统的奥秘》在当今数字化时代,操作系统扮演着至关重要的角色,它是计算机系统的核心,负责管理硬件资源、提供用户接口、运行应用程序等重要功能。
为了更深入地了解操作系统的内部机制和工作原理,我们进行了一系列Pintos实验,并在此撰写实验报告,以分享我们的实验经验和心得。
Pintos是一款由斯坦福大学开发的教学用操作系统,它旨在帮助学生理解操作系统的基本概念和实现原理。
通过实验Pintos,我们得以深入研究操作系统的各个方面,包括线程管理、内存管理、文件系统等。
在这些实验中,我们不仅仅是简单地完成实验任务,更重要的是通过思考和探索,逐步理解操作系统的运行机制。
在线程管理实验中,我们学习了线程的创建、调度和同步等内容。
通过编写代码实现线程的创建和调度,我们深刻体会到了线程管理的复杂性和重要性。
在内存管理实验中,我们研究了虚拟内存的概念和实现方法,通过实验验证了页面置换算法的效果。
在文件系统实验中,我们了解了文件系统的组织结构和文件操作的实现原理,通过实验探究了文件系统的性能和稳定性。
通过Pintos实验,我们不仅仅是学习了操作系统的理论知识,更重要的是锻炼了我们的动手能力和解决问题的能力。
在实验过程中,我们遇到了各种各样的问题,需要通过分析和调试来解决。
这些问题的解决过程,让我们更加深入地理解了操作系统的内部机制,也提升了我们的编程能力和问题解决能力。
总的来说,通过Pintos实验,我们对操作系统有了更加深入的理解,同时也提升了我们的实际能力。
我们相信,通过不断地学习和实践,我们能够更好地理解和应用操作系统的知识,为未来的技术发展做出更大的贡献。
希望我们的实验报告能够对更多的人有所帮助,一起探索操作系统的奥秘!。
Pintos调试心得
一、如何用GDB调试内核:
Ctrl+Alt+F1打开终端,cd切换到你的pintos/src/threads/build目录下
输入命令pintos –gdb –run alarm-multiple(注意是双线- -,注意run前的空格)出现下面的界面:(注意uilts文件下已经编译通过,还有bochs打开终端调试)
然后,Ctrl+Alt+F2打开第二个终端登录并切换到pintos/src/threads/build目录下
输入命令pintos-gdb -tui
看到如下界面:
按enter键继续,此时为进入gdb调试控制台
输入命令target remote localhost:1234(默认端口,应该与第一个终端里显示的一致)接着输入命令file kernel.o(载入要调试的内核程序),看到如下界面:
输入y继续,这样开始调试啦
(首先自己在网上百度一下gdb常用的调试命令)
break main(在main函数入口插入断点)
接着c(continue的意思跟VS、VC++中的调试命令对应)
看到如下界面
注意划红线部分
输入n(执行下一步,不会进入函数体内部,step单步运行命令会进入函数内部)然后大家可以在第一个终端里查看运行结果。
比如我在第79行添加了一行
Ctrl+Alt+F1打开第一个终端可以看到执行结果
接下来自己慢慢探索吧,感受一下gdb调试器的强大之处。
下面介绍一下我对pintos的理解
二、Pintos内部函数调用
内核加载完成后,进入main函数(pintos主程序)
开始boot
bss_init (); 初始化BSS,(BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。
特点是:可读写的,在程序执行之前BSS 段会自动清0。
)
argv = read_command_line ();//读取命令行
argv = parse_options (argv);//分析命令行
thread_init ();初始化主线程
console_init ();
/* 问候用户*/
printf ("Pintos booting with %'"PRIu32" kB RAM...\n", init_ram_pages * PGSIZE / 1024);
在终端打印
/* 初始化内存系统*/
palloc_init (user_page_limit);
malloc_init ();
paging_init ();
/*初始化中断处理*/
intr_init ();
timer_init ();
kbd_init ();
input_init ();
/* 开启线程调度,开启中断*/
thread_start ();//创建idle空线程
serial_init_queue ();
timer_calibrate ();
printf ("Boot complete.\n");//开机完成
/* 运行内核命令行*/
run_actions (argv);
//这个函数会调用struct action a;中的方法
//让我们进入a->function(argv),看到其调用run_task()函数,找到struct action的定义//自己查看一下
//接着我们进入run_test()函数,看到其是tests.c中的,其调用结构体struct test中的//function()方法
//进入该函数后我们已经接近alarm-multiple的真相了,看到test_sleep(5,7)它传入就是//的参数含义就是创建5个线程每个线程sleep迭代7次,这样我们就看到了运行结果//所显示的
//进入test_sleep(5,7)然后我们在timer_sleep()处设置断点就可以观察到该函数被不断调//用
/*然后我们也会发现在tests文件夹下有很多其他的命令,自己可以探索一下。
方法雷同。
*/
/*完成后关机,退出线程*/c
shutdown ();
thread_exit ();。