30天自制操作系统日志第3天
- 格式:docx
- 大小:620.88 KB
- 文档页数:12
oracle清理30天归档日志-回复Oracle数据库是一种非常强大且广泛使用的关系型数据库管理系统。
随着时间的推移,数据库中的日志文件会逐渐增加,占用大量的存储空间。
为了确保系统正常运行并节约存储资源,定期清理归档日志文件变得至关重要。
本文将逐步介绍如何清理Oracle数据库中30天前的归档日志文件。
步骤一:确认数据库归档模式和归档日志保存期限在执行清理归档日志的操作之前,我们需要确认数据库当前的归档模式以及归档日志的保存期限。
归档模式主要有两种:归档模式(ARCHIVELOG)和非归档模式(NOARCHIVELOG)。
归档模式下,Oracle 会将已经使用的日志文件以及在线日志文件归档并保存为归档日志文件。
非归档模式下,Oracle只保留正在使用的日志文件,不会进行归档保存。
要确认数据库的归档模式,可以执行以下SQL语句:SELECT log_mode FROM vdatabase;该查询结果将显示数据库当前的归档模式。
另外,我们还需要确认数据库的归档日志保存期限。
Oracle会根据数据库的配置自动删除30天以前的归档日志文件。
如果需要更改归档日志保存期限,可以执行以下SQL语句:ALTER SYSTEM SET LOG_ARCHIVE_RETENTION_TARGET=30;该语句将设置归档日志保存期限为30天。
请注意,更改归档日志保存期限可能会有一定的风险,请谨慎操作。
步骤二:确认数据库归档日志文件的位置在执行清理归档日志的操作之前,我们还需要确认数据库归档日志文件的位置。
可以执行以下SQL语句来获取归档日志文件的存储位置:SELECT name FROM VARCHIVE_DEST WHERE status='VALID';该查询结果将显示归档日志文件存储的位置。
步骤三:清理30天前的归档日志一旦确认了数据库的归档模式、归档日志保存期限以及归档日志文件的位置,我们就可以开始清理30天前的归档日志文件了。
系统管理软件实习日记
实习日记 - 系统管理软件部门
星期一:
今天是我在系统管理软件部门的第一天实习。
上午,我受到导师的指导,学习了公司的系统架构和运行流程。
下午,我开始独立完成一些简单的任务,如查看服务器运行状态和更新软件版本。
星期二:
我今天学习了如何管理用户权限和配置网络设置。
我也跟随导师一起参与了一个紧急的故障排查工作,学到了很多实际操作经验。
星期三:
今天我开始进行一项重要的项目,需要对公司的系统进行升级和优化。
我花了大部分时间阅读文档和学习相关知识,准备着手实施。
星期四:
在项目进行过程中,我遇到了一些困难,导致系统出现了一些不稳定的情况。
我及时向导师汇报,一起分析问题的原因并找到解决方案。
通过这次经历,我学会了及时沟通和团队合作的重要性。
星期五:
项目终于完成了,公司的系统运行稳定且效率提升了。
导师对我的工作进行了肯定,并鼓励我继续努力学习和提升自己。
我感到很有成就感,也更加对系统管理软件这个领域充满热情。
总结:
这一周的实习经历让我收获颇丰,不仅学到了很多专业知识和技能,也体会到了实际工作的挑战和乐趣。
我会继续努力,为公司的发展贡献自己的力量。
Windows系统中的系统日志查看与分析Windows操作系统提供了一个系统日志功能,用于记录操作系统和应用程序的活动和事件。
系统日志是管理员和技术支持人员用来诊断系统问题和监视系统性能的重要工具。
本文将介绍在Windows系统中如何查看和分析系统日志。
一、查看系统日志在Windows系统中,可以通过事件查看器来查看系统日志。
以下是查看系统日志的方法:1. 打开事件查看器在Windows操作系统的开始菜单中,搜索并打开“事件查看器”。
2. 导航至系统日志在事件查看器左侧的导航栏中,展开“Windows日志”,然后选择“系统”。
3. 检查日志系统日志中列出了操作系统的各种事件和错误。
可以根据事件级别(如错误、警告、信息)和日期范围进行筛选和排序。
二、分析系统日志系统日志中的事件提供了有关系统的重要信息和警告。
以下是分析系统日志的一些常见方法:1. 查找错误和警告在系统日志中,查找错误(红色叉号)和警告(黄色感叹号)的事件。
这些事件表示可能存在的问题或潜在的系统错误。
2. 查看事件详细信息双击一个事件,以查看其详细信息。
可以获得有关事件的时间戳、源、类别和描述等信息。
此外,还可以查看事件的特定属性和数据。
3. 使用筛选器事件查看器提供了筛选器功能,可以根据关键字、事件ID和事件级别等条件来筛选事件。
这有助于快速找到与特定问题相关的事件。
4. 导出日志有时,需要将系统日志导出并共享给其他技术支持人员。
可以使用事件查看器的导出功能将日志保存为文件,供后续分析和分享。
三、常见的系统日志事件以下是一些常见的系统日志事件及其含义:1. 硬件故障事件这些事件通常与硬件设备(如磁盘驱动器、内存)有关,表示硬件故障或错误。
2. 系统错误事件这些事件表示操作系统遇到了错误或异常情况。
例如,系统崩溃、蓝屏或无响应等。
3. 应用程序错误事件这些事件与特定应用程序有关,表示应用程序遇到了错误或异常情况。
4. 安全事件安全事件包括登录失败、文件访问权限等与系统安全相关的事件。
Windows cmd命令中的系统日志管理技巧在Windows操作系统中,日志是记录系统事件和错误的重要工具。
通过查看系统日志,我们可以了解系统的运行情况,及时发现问题并采取相应的措施。
本文将介绍一些Windows cmd命令中的系统日志管理技巧,帮助您更好地管理和利用系统日志。
一、查看系统日志1. eventvwr:这个命令可以打开事件查看器,提供了一个图形化界面,方便我们查看和管理系统日志。
在命令提示符下输入eventvwr并按下回车键即可打开事件查看器。
2. wevtutil:这个命令可以在命令行下查看和管理系统日志。
例如,输入wevtutil qe System /c:10 /rd:true可以查看最近的10条系统日志。
其中,System表示要查看的日志类型,/c:10表示要查看的日志条数,/rd:true表示按照逆序排列。
二、导出系统日志1. wevtutil:通过wevtutil命令,我们可以将系统日志导出为XML或CSV格式的文件,方便我们进行后续的分析和处理。
例如,输入wevtutil epl SystemC:\SystemLog.xml可以将System日志导出为XML格式的文件,并保存在C盘根目录下的SystemLog.xml文件中。
2. PowerShell:除了wevtutil命令,我们还可以使用PowerShell来导出系统日志。
例如,输入Get-WinEvent -LogName System | Export-Csv C:\SystemLog.csv可以将System日志导出为CSV格式的文件,并保存在C盘根目录下的SystemLog.csv 文件中。
三、清除系统日志1. wevtutil:通过wevtutil命令,我们可以清除系统日志中的所有事件。
例如,输入wevtutil cl System可以清除System日志中的所有事件。
2. PowerShell:除了wevtutil命令,我们还可以使用PowerShell来清除系统日志中的事件。
浅谈管理系统操作⽇志设计(附操作⽇志类) 管理系统的操作⽇志如何做成通⽤的模块⼀直是个让我头疼的问题,不过看了博客园⾥的某篇⽂章后,现在基本解决了。
相关⽂章链接:《》 在开始做之前,必须把两个⽇志分清楚,那就是普通操作⽇志和业务操作⽇志,这两者有何区别? 在我理解,普通操作⽇志就是单表的操作记录,⽽业务操作⽇志则就是⼀系列的普通操作⽇志的集合。
打个⽐⽅,⽤户需要购买⼀样宝贝,已经到了下单那步,下单就是个业务,这个业务背后就是⼀系列的业务,如: ⽣成订单 → ⽣成商品快照 → 发送⼀条站内信 → 删除购物车⾥对应宝贝 这样⼀个下单操作就包含了4部分,可以把这4部分看成是4张表,分别对这4张表进⾏对应的操作,就实现了业务。
但今天我要讲的不是业务操作⽇志,因为不同项⽬的业务不尽相同,所以它⽆法做成通⽤模块,⽽我要讲的,就是普通操作⽇志。
上⾯解释了⼀⼤段,下⾯⼲货就要亮相了,先洗把脸清醒下。
…… ⾸先,哪些地⽅需要记录操作⽇志?执⾏insert、update、delete这3个操作的时候,就需要进⾏⽇志,⽽⽇志执⾏的先后顺序如下insert在insert后执⾏update在update前后都要执⾏,操作前获取操作前数据,操作后获取操作后数据delete在delete前执⾏ 顺序清楚后,就来看下我写的⼀份⽇志操作类吧,第⼀版随便写写的,重复代码有点多,还未来得及优化。
class LOG{protected $primaryid;protected $tbid;protected $tbname;protected $keys;protected $values;/*** 参数说明* int $tbid 查询指定表的id* string $tbname 数据库表名*/public function insert($tbid, $tbname){global $db;//查询表注释$db->query('show table status where name = "'.$tbname.'"');$tb = $db->fetch();//插⼊⽇志主表$returnid = $db->insert(0, 2, 'tb_log', array('adminid = '.$_SESSION['admin']['id'],'type = 1','tableid = '.$tbid,'tablename = "'.$tbname.'"','comment = "'.$tb['Comment'].'"','dt = now()'));//查询字段注释$db->query('show full columns from '.$tbname);$tb = $db->fetchAll();foreach($tb as $v){$commentArray[$v['Field']] = $v['Comment'];}//查询所有字段信息,插⼊⽇志从表$rs = $db->select(0, 1, $tbname, '*', 'and tbid = '.$tbid);$keys = array_keys($rs);$values = array_values($rs);for($i = 0; $i < count($keys); $i++){$db->insert(0, 0, 'tb_log_content', array('logid = '.$returnid,'tbkey = "'.$keys[$i].'"','tbvalue = "'.$values[$i].'"','comment = "'.$commentArray[$keys[$i]].'"'));}}public function updateStart($tbid, $tbname){global $db;//查询表注释$db->query('show table status where name = "'.$tbname.'"');$tb = $db->fetch();//插⼊⽇志主表$returnid = $db->insert(0, 2, 'tb_log', array('adminid = '.$_SESSION['admin']['id'],'type = 2','tableid = '.$tbid,'tablename = "'.$tbname.'"','comment = "'.$tb['Comment'].'"','dt = now()'));//查询修改前数据信息$rs = $db->select(0, 1, $tbname, '*', 'and tbid = '.$tbid);$keys = array_keys($rs);$values = array_values($rs);$this->primaryid = $returnid;$this->tbid = $tbid;$this->tbname = $tbname;$this->keys = $keys;$this->values = $values;}public function updateEnd(){global $db;//查询字段注释$db->query('show full columns from '.$this->tbname);$tb = $db->fetchAll();foreach($tb as $v){$commentArray[$v['Field']] = $v['Comment'];}//查询修改后数据信息$rs = $db->select(0, 1, $this->tbname, '*', 'and tbid = '.$this->tbid); $currentvalues = array_values($rs);//前后信息进⾏⽐较for($i = 0; $i < count($currentvalues); $i++){if($this->values[$i] !== $currentvalues[$i]){$db->insert(0, 0, 'tb_log_content', array('logid = '.$this->primaryid,'tbkey = "'.$this->keys[$i].'"','tbvalue = "'.$this->values[$i].'"','currenttbvalue = "'.$currentvalues[$i].'"','comment = "'.$commentArray[$this->keys[$i]].'"'));}}}public function delete($tbid, $tbname){global $db;//查询表注释$db->query('show table status where name = "'.$tbname.'"');$tb = $db->fetch();//插⼊⽇志主表$returnid = $db->insert(0, 2, 'tb_log', array('adminid = '.$_SESSION['admin']['id'],'type = 3','tableid = '.$tbid,'tablename = "'.$tbname.'"','comment = "'.$tb['Comment'].'"','dt = now()'));//查询字段注释$db->query('show full columns from '.$tbname);$tb = $db->fetchAll();foreach($tb as $v){$commentArray[$v['Field']] = $v['Comment'];}//查询所有字段信息,插⼊⽇志从表$rs = $db->select(0, 1, $tbname, '*', 'and tbid = '.$tbid);$keys = array_keys($rs);$values = array_values($rs);for($i = 0; $i < count($keys); $i++){$db->insert(0, 0, 'tb_log_content', array('logid = '.$returnid,'tbkey = "'.$keys[$i].'"','tbvalue = "'.$values[$i].'"','comment = "'.$commentArray[$keys[$i]].'"'));}}} 使⽤前,需要引⼊数据库操作类,这是我之前写的⼀份,可参考《》。
2018年计算机专业实训日记范文200字【五篇】计算机专业是计算机硬件与软件相结合,面向系统,侧重应用的宽口径专业.通过基础教学与专业训练,培养基础知识扎实,知识面宽,工程实践能力强,具有开拓创新意识,在计算机科学与技术领域从事科学研究,教育,开发和应用的高级人才.小编为大家整理的>,希望对大家有所帮助!篇一今天我来到了联通系统集成有限公司山东省分公司.开始了我为期半年的实习生活.早上8点在办公室,公司的人事部经理向我介绍IT部门的李主管以及负责这次带我实习的员工们.首先李主管给我介绍了一下公司基本情况和部门的运作,其次向我讲述了实习过程的计划和安排;从今天开始我便按照实习计划逐步展开了学习:这是来到公司的第一天,简单地熟悉了公司的一些运营模式,以及员工工作方式.对公司有了一个大致了解.呵呵迎接正式实习的第一天吧.篇二经过昨天一天对公司的大致了解,本以为自己会很快适应公司模式.但是在实习主要负责人的带领下了解公司分配的主要任务,还是感觉心里空空的.毕竟昔日在学校的作息时间,一下子被工作所取代,还真有点不适应.其实在此之前我也作好了进入社会的准备,以前经历过一次毕业,现在总比第一次毕业时〝无所适从〞的感觉要好很多,心态也放得更为平和.如果真要说点与众不同的话,那就是明显感觉到:多了一些信心与实在.篇三下班回来,躺在床上,感觉这两天的工作量也不算大,主要就是负责人给了一些项目案例,让进行分析以及总,然后给出一个总的方案文档.可能是自己的心态在作怪吧,老感觉自己是大学生.来实习不是负责文档整理工作的,老想接触些实质性的工作.可是突然发现自己就是做一些整理文档的基本工作也不一定能做好.唉,还是脚踏实地,慢慢来吧.篇四哈哈,今天比较开心,自己整理的文档终于通过审核了,那就意味着自己可以开始慢慢接触一些编程相关工作了.通过这几天的文档整理,自己感觉工作没有什么高低贵贱之分,每个步骤都很重要.比如文档吧,编程人员就是通过文档了解用户需求,然后根据用户需求进行建模设计.如果一份文档不能表达出用户的需求意图和需要,那么你做出的系统再好,对客户来说都是废物一个.以后自己在进行设计之前一定要充分了解了用户需求再开始进行设计.篇五今天在师傅的指导下,重新全面学习了网络服务器的相关知识.服务器的配置是系统运行的重要一个环节.网络服务器是局域网的核心,根据它在网络中所起的作用,还可以进一步分为文件服务器,打印服务器和通信服务器.文件服务器能讲大容量磁盘空间提供给网上客户机使用,接收客户机提出的数据处理和文件存取请求,向用户(客户机)提供各种服务.打印服务器接收来自客户机的打印任务.通信服务器主要负责网与网之间的通信和提供各种调制解调器等多种接口.2018年计算机专业实训日记范文200字【五篇】.doc。
系统管理员周系统运行日志2022年3月1日早上8点:开始工作。
首先,检查服务器的运行状况。
登录系统,并查看各个服务器的运行状态。
确认所有服务器都正常运行,并检查网络连接是否稳定。
检查日志,没有发现任何异常情况。
上午10点:收到用户报告,称某个应用程序在访问数据库时遇到问题。
立即定位该应用程序所在的服务器,并检查相应的日志文件。
发现数据库连接出现故障,无法与应用程序成功建立连接。
尝试重新启动数据库服务,问题得到解决。
中午12点:午饭休息时间。
下午2点:接收到报警通知,提示某台服务器上的硬盘空间不足。
立即登录该服务器,并使用命令行工具查看磁盘使用情况。
发现某个日志文件不断增长,占用了大量磁盘空间。
通过清理过期的日志文件,释放了足够的磁盘空间。
下午4点:进行系统安全检查。
检查系统的安全设置,确保防火墙和入侵检测系统正常运行。
扫描服务器,查找潜在的安全漏洞并修复。
更新服务器上的安全补丁。
下午6点:安排定期数据备份任务的执行。
确保所有重要数据都得到及时备份,并验证备份文件的完整性和可还原性。
晚上8点:整理运行日志文档,记录当天的所有操作和故障处理过程。
详细描述每个故障的原因和解决方法。
晚上10点:工作结束,关闭服务器,下班回家。
2022年3月2日早上8点:开始工作。
检查昨天的运行日志,确认是否有未解决的问题。
发现有一个用户报告了无法登录系统的问题。
立即与该用户联系,并进行远程支持。
通过重置用户密码,问题得到解决。
上午10点:参加网络安全培训课程。
学习最新的网络安全威胁和防护措施,提高自身的技术水平。
中午12点:午饭休息时间。
下午2点:对服务器进行性能优化。
检查服务器的负载情况,查找可能导致性能下降的原因。
优化数据库查询语句和服务器配置,提升系统响应速度。
下午4点:处理用户提交的故障工单。
根据工单的描述,远程登录用户的计算机,并进行故障排除。
通过与用户的沟通,确定问题是由于网络连接不稳定导致的,建议用户与网络服务提供商联系。
系统日志手册系统日志是一份记录系统运行情况和故障的文件,它包含各种信息,包括硬件、软件和网络方面的问题。
作为系统管理员,了解和分析日志信息可以帮助您更好地了解系统运行状态并有效地应对故障。
本手册将为您介绍系统日志的基本概念、格式和内容,并提供一些实用的技巧和工具,旨在帮助您更有效地管理和分析系统日志。
一、什么是系统日志系统日志是操作系统和应用程序自动生成的一个文件,用来记录系统的各种事件、错误和警告信息。
日志事件可被分为三个主要类别:信息、警告和错误。
信息事件用于报告系统工作和状态信息,警告事件用于标识可能影响系统性能和可用性的问题,错误事件则指明产生了错误且需要立即检查和纠正。
系统日志可以帮助管理员快速识别并解决各种问题,包括应用程序错误、系统配置错误、硬件问题等等。
可以有效地提高系统的可用性和可维护性。
二、系统日志的格式系统日志的格式因操作系统和应用程序的不同而异,但通常会包含以下元素:1. 时间戳:记录事件发生的日期和时间。
2. 日志级别:记录事件的级别,分为信息、警告和错误三种。
3. 事件源:记录事件发生的应用程序或系统组件。
4. 事件 ID:事件 ID 是事件的唯一标识符,可用于查找和过滤相关事件。
5. 事件描述:详细描述事件的发生和详细信息,提供有用的上下文。
6. 操作员:记录执行操作的用户。
三、系统日志的内容系统日志包含了各种信息,以下是对常用日志消息的描述:1. 安全事件日志安全事件日志是记录审核和安全性方面的事件,包括成功或失败的登录尝试、安全组和用户管理操作等等。
这些日志非常重要,可以帮助您监控是否有恶意攻击、未经授权的访问等安全问题。
2. 应用程序事件日志应用程序事件日志记录应用程序初始化、运行时和关闭等各种事件。
其中包括应用程序崩溃、异常、错误信息等,是分析应用程序问题的关键信息来源。
3. 系统事件日志系统事件日志提供了有关系统资源、设备服务和底层操作系统的事件记录,包括停止和启动服务、硬件或软件故障,系统资源耗尽等。
程序员实习日记程序员实习日记「篇一」我们在使用tooltip的时候,有以下几个关键点:1、创建CToolTipCtrl对象,Create函数实现。
2、使用AddTool函数向这个tooltip中加入tools,这也是绑定tool到某个控件的过程,从中我们可以知道在这个CToolTipCtrl对象中应该存在着不止一个tool,而是一系列的tool,通过函数DelTool实现删除,AddTool实现添加,UpdateTipText实现更新tool的文本。
3、最关键的是我们需要一个触发tooltip的关键点,这个关键点控制着何时显示这个tooltip,一般情况下我们在PreTranslateMessage函数中进行处理,这也是我们拦截WM_MOUSEMOVE的地方,拦截之后,我们调用tooltip的RelayEvent 向toolTip对象传递这个消息用以表示tooltip可以被显示或者更新。
静态链接MFC DLL模块的时候,由于MFC总是使用它所练级额的DLL模块状态,所以不存在模块管理的问题。
调试DLL的时候,我们需要exe文件的配合,所以先要生成exe测试文件,然后将DLL工程设置成active ,这时候会出现exe路径提示对话框,我们将测试用的exe路径填入就可以了。
程序员实习日记「篇二」今天是实习的第一天,走进公司的时候,与主管进行了简单的面谈之后,并没有给我留下过多的任务,先让我熟悉一下环境,了解了一下公司的状况,包括其规模、部门、人员分工等。
由于在校的时候实际锻炼的机会比较少,在这要学的东西有很多。
一天基本都是在学习,熟悉环境。
这边吃饭要到餐馆去买,贵啊:(!不像在学校有食堂,饭菜经济实惠!程序员实习日记「篇三」终于解决了困扰已久的apache不能启动的问题,首先xampp里出现 busy apache start[port 80]时先检查你的80端口是否被占用,我用的扫描端口软件是TCPView 保证没有本地占用80端口,而且发现即使在xamppapacheconf 中改了httpd文件里面的端口设置,在concle里面还是现实80端口但是查看TCP的时候明显他是用了你设置的端口(8080),但是只有用80的时候可以从127.0.0.1或者https://localhost进入,因为用这个进入是默认为127.0.0.1:80或者localhost:80所以只改了httpd里面的80是不行的必须在访问网页的时候加上:8080(假设我设置的是用8080端口)程序员实习日记「篇四」今天下班后回宿舍上机调试程序,一个java网站,用Tomcat作服务器,在被浏览器加载的时候总是无法显示出来,页面提示出错信息:500错误。
如何在Windows CMD命令中实现系统日志和事件管理Windows操作系统提供了多种方法来管理系统日志和事件,其中CMD命令是一种常用且强大的工具。
本文将介绍如何使用CMD命令来实现系统日志和事件的管理。
一、查看系统日志1. 打开CMD命令行窗口。
在Windows操作系统中,可以通过按下Win+R键,然后输入"cmd"来打开CMD命令行窗口。
2. 输入命令"eventvwr"并按下回车键。
这个命令会打开系统事件查看器,其中包含了系统日志的各种信息。
3. 在事件查看器中,可以查看系统日志的不同类别,如应用程序日志、安全日志、系统日志等。
可以通过选择相应的类别来查看对应的日志信息。
4. 可以通过CMD命令来导出系统日志。
输入命令"wevtutil epl <日志文件路径>",其中"<日志文件路径>"是要导出的日志文件的保存路径。
导出的日志文件可以方便地进行分析和备份。
二、清除系统日志1. 打开CMD命令行窗口。
2. 输入命令"wevtutil cl <日志名称>",其中"<日志名称>"是要清除的日志的名称。
可以使用"wevtutil el"命令来查看系统中存在的日志名称。
3. 确认清除操作后,系统日志将被清空。
三、监控系统事件1. 打开CMD命令行窗口。
2. 输入命令"wevtutil qe <日志名称> /f:text",其中"<日志名称>"是要监控的日志的名称。
可以使用"wevtutil el"命令来查看系统中存在的日志名称。
3. CMD命令将实时显示所选日志的最新事件。
四、筛选系统事件1. 打开CMD命令行窗口。
2. 输入命令"wevtutil qe <日志名称> /q:<筛选条件> /f:text",其中"<日志名称>"是要筛选的日志的名称,"<筛选条件>"是所选日志的筛选条件。
操作系统实验日志一、实验主要内容1、制作真正的IPL,即启动程序加载器,用来加载程序。
添加的代码关键部分如下:MOV AX,0x0820MOV ES,AXMOV CH,0 ;柱面0MOV DH,0 ;磁头0MOV CL,2MOV AH,0x02 ;AH=0x02:读盘MOV AL,1 ;执行1个扇区MOV BX,0MOV DL,0x00 ; A驱动器(现在都只有一个驱动器了)INT 0x13 ;调用磁盘BIOSJC error这里有JC指令,是一些特定指令中的一种,后面知识点收录有。
JC就是jump if carry,如果进位标志位1的话,就跳转。
就是成功调用0x13就会跳转到error处。
INT 0x13又是一个中断,这里AH是0x02的时候是读盘的意思,就是要把磁盘的内容写入到内存中。
今天实验用到了4个软中断,都记在知识点里了。
至于CH\DH\CL\AL三个寄存器呢,就分别是柱面号、磁头号、扇区号、执行的扇区数。
那么含有IPL的启动区位于:C0-H0-S1 (Cylinder, magnetic Head, Sector)然后ES\BX和缓冲地址有关。
2、缓冲区地址0x0820MOV AL,[ES:BX] ; ES*16+BX -> AL说是原来16位的BX只能表示0~65535,后来就引入了一个段寄存器,用MOV AL,[ES:BX] ;ES*16+BX -> AL这样的方法就可以表示更大的地址,就够当时用了,可以指定1M内存地址了。
那么这里我们就是将0X0820赋值给ES,BX为0,这样ES*16后就访问0X8200的地址,那么就是讲软盘数据转载到0X8200到0X83ff的地方。
3、试错以及读满10个柱面MOV AX,0x0820MOV ES,AXMOV CH,0MOV DH,0MOV CL,2readloop:MOV SI,0 ; 记录失败的次数,SI达到5就停止retry:MOV AH,0x02MOV AL,1MOV BX,0MOV DL,0x00INT 0x13JNC next ; 没出错就跳到nextADD SI,1 ; SI加一CMP SI,5 ; SI和5比较JAE error ; SI >= 5 时跳转到errorMOV AH,0x00MOV DL,0x00INT 0x13 ; 重置驱动器,看上面AH变为0X00和0X02功能不同JMP retrynext:MOV AX,ESADD AX,0x0020MOV ES,AXADD CL,1CMP CL,18JBE readloopMOV CL,1ADD DH,1CMP DH,2JB readloopMOV DH,0ADD CH,1CMP CH,CYLSJB readloop这里很明显,从CL\DH\CH依次循环计数,就是读取完一个磁头的扇区后换一个磁头,到这个柱面都结束了就换一个柱面,一直读完10个柱面。
4、到正菜了,主程序操作系统完成了启动区的制作,下一步开始编写操作系统代码。
最简单的操作系统haribote.nas:Fin:HLTJmp fin我们需要将操作系统本身的内容写到名为haribote.sys文件中,再把他保存到磁盘映像里,然后我们从启动区执行这个haribote.sys就行了。
老作者用一个简单的例子告诉我们当我们向一张空软盘保存文件时,1)文件名会写在0x002600以后的地方;2)文件的内容会写在0x004200以后的地方。
由于目前的启动区程序是从启动区后面开始(不包括启动区)加载到内存地址0x8200处的,所以磁盘0x4200的内容就会被加载到内存地址0xc200处,其中0xc200 = 0x8200 + 0x4200 - 512(启动区大小),现在我们就可从0xc200处加载我们自己写的程序用于执行了。
需要在haribote.nas头加入org 0xc200,在启动区最后添加代码jmp 0xc200。
如此在装载完os后,即会跳到地址0xc200执行操作系统程序。
5、让他显示图形模式这里是中断调用显卡函数,设置显示模式,320*200*8位彩色模式,有256种颜色可以使用。
画面一片漆黑,大概是因为显存没有设置吧,下面的预存地址VRAM就是为显存留的,Video RAM,显卡内存,他的地址对应着屏幕上的像素。
修改这个应该可以改颜色,黑色大概是默认?老贼(把坑的作者叫老贼)也不说,唉,还要查。
6、进入32位模式及保存画面模式32位固然好,但是CPU32位模式不能调用BIOS功能。
设定完画面模式后就要得到键盘状态。
这里就是把画面的像素数、颜色数、键盘信息都保存了起来。
和CYLS一样,都保存在了0X0FF0附近。
7、C语言正式出场!小场面,戏份不足这C关键部分真的是没讲嘛!老贼!下节的内容。
8、文件的转换生成流程图果然一目了然,但是真的难画,用网上的:9、一些知识点A、汇编指令JC指令JC,是“jump if carry”的缩写,意思是如果进位标志是1的话,就跳转。
JNC指令JNC,是“jump if not carry”的缩写,意思是如果进位标志是0的话,就跳转。
JAE指令JAE,是“jump if above or equal”的缩写,意思是大于或者等于时,跳转。
JBE指令JBE,是“jump if below or equal”的缩写,意思是小于或者等于时,跳转。
JB,是“jump if below”的缩写,意思是大于或者等于时,跳转。
B、软中断新学到的4个软中断(1)INT 13h AH=02h: 读盘,即从磁盘中读取扇区参数:AH: 02hAL: 读入的扇区数CH: 柱面号CL: 扇区号DH: 磁头号DL: 磁盘号ES:BX, 缓冲区地址返回值:CF: 错误置1,正确置0AH: 返回值代码AL: 实际读取的扇区数(2)INT 13h AH=00h: 复位磁盘驱动参数:AH: 00hDL: 磁盘号返回值:CF: 错误置为1(3)INT 10h AH=00h: 设置显示模式参数:AH: 00hAL: 显示模式AL = video mode flag / CRT controller mode byte(4)INT 16H AH=02h: 获取键盘的状态信息C、文件的转换工具作用输入输出cc1 gcc以gas汇编语言为基础,输出gas用的源程序.c .gas gas2nask 把gas变换成nask能翻译的语法.gas .nas nask 翻译成机器语言,生成目标文件.obj .nas .objobi2bim 目标文件需与其他文件link才能编程真正可以执行的机器语言,bim是二进制映像文件,是一种代替的形式.obj .bim bim2hrm 为了能够实际使用,要做成适合本书操作系统要求的形式.bim .hrb二、遇到的问题及解决方法1、这里有些疑惑,说什么0X8000~0x83ff是留给启动区的,但是启动区明明是在0X7C00到0X7DFF的。
8000留给启动区是作什么用途呢?还有这中间的地址又是作什么用呢?目前没有解决。
三、程序设计创新点1、硬盘知识上面没有细讲到软盘的结构,是我对这个真的感兴趣,就去网上找了一些资料,果然更全面。
下面是内容:概述盘片(platter)磁头(head)磁道(track)扇区(sector)柱面(cylinder)盘片片面和磁头硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。
受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。
盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。
如下图:图1扇区和磁道下图显示的是一个盘面,盘面中一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。
扇区是磁盘的最小组成单元,通常是512字节。
(由于不断提高磁盘的大小,部分厂商设定每个扇区的大小是4096字节)图2磁头和柱面硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。
磁盘的柱面数与一个盘面上的磁道数是相等的。
由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。
如下图图3磁盘容量计算存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数图3中磁盘是一个3个圆盘6个磁头,7个柱面(每个盘片7个磁道)的磁盘,图3中每条磁道有12个扇区,所以此磁盘的容量为:存储容量 6 * 7 * 12 * 512 = 258048每个磁道的扇区数一样是说的老的硬盘,外圈的密度小,内圈的密度大,每圈可存储的数据量是一样的。
新的硬盘数据的密度都一致,这样磁道的周长越长,扇区就越多,存储的数据量就越大。
磁盘读取响应时间寻道时间:磁头从开始移动到数据所在磁道所需要的时间,寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms,一般都在10ms左右。
旋转延迟:盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间,旋转延迟取决于磁盘转速。
普通硬盘一般都是7200rpm,慢的5400rpm。
数据传输时间:完成传输所请求的数据所需要的时间。
小结一下:从上面的指标来看、其实最重要的、或者说、我们最关心的应该只有两个:寻道时间;旋转延迟。
读写一次磁盘信息所需的时间可分解为:寻道时间、延迟时间、传输时间。
为提高磁盘传输效率,软件应着重考虑减少寻道时间和延迟时间。
块/簇概述磁盘块/簇(虚拟出来的)。
块是操作系统中最小的逻辑存储单位。
操作系统与磁盘打交道的最小单位是磁盘块。
通俗的来讲,在Windows下如NTFS等文件系统中叫做簇;在Linux下如Ext4等文件系统中叫做块(block)。
每个簇或者块可以包括2、4、8、16、32、64…2的n次方个扇区。
为什么存在磁盘块?读取方便:由于扇区的数量比较小,数目众多在寻址时比较困难,所以操作系统就将相邻的扇区组合在一起,形成一个块,再对块进行整体的操作。
分离对底层的依赖:操作系统忽略对底层物理存储结构的设计。
通过虚拟出来磁盘块的概念,在系统中认为块是最小的单位。
Page:操作系统经常与内存和硬盘这两种存储设备进行通信,类似于“块”的概念,都需要一种虚拟的基本单位。
所以,与内存操作,是虚拟一个页的概念来作为最小单位。
与硬盘打交道,就是以块为最小单位。
扇区、块/簇、page的关系扇区:硬盘的最小读写单元块/簇:是操作系统针对硬盘读写的最小单元page:是内存与操作系统之间操作的最小单元。
扇区<= 块/簇<= page以上是网络搜寻的知识概要。