操作系统
文章平均质量分 73
rongwenbin
这个作者很懒,什么都没留下…
展开
-
进程死锁概念
笔试常考概念归纳(数据库死锁篇)1. 死锁的概念死锁是进程死锁的简称,是由Dijkstra于1965年研究银行家算法时首先提出来的。它是计算机操作系统乃至并发程序设计中最难处理的问题之一。实际上,死锁问题不仅在计算机系统中存在,在我们日常生活中它也广泛存在。我们先看看这样一个生活中的例子:在一条河上有一座桥,桥面较窄,只能容纳一辆汽车通过,无法让两辆汽车并行。如果有两辆汽车A和转载 2015-09-16 15:19:01 · 452 阅读 · 0 评论 -
深入理解句柄表
设计到句柄表的有以下这些概念HANDLE_TABLEHANDLE_TABLE结构体中的TableCode变量实际上啊,TableCode是指向句柄表项第一个句柄表项的指针(NULL句柄表项)TableCode就是HANDLE_TABLE_ENTRY的指针但是,当有两级以上表时,这个时候就不是了,先来搞定最简单的。HANDLE_TABLE_ENTRY:句柄表项对象头_OB转载 2014-02-26 12:36:03 · 3563 阅读 · 2 评论 -
如何使用windbg看eprocess的结构
安装windbg加入 symbol path 运行WinDbg->菜单->File->Symbol File Path->按照下面的方法设置_NT_SYMBOL_PATH变量:在弹出的框中输入“C:/MyCodesSymbols;SRV*C:/MyLocalSymbols*http://msdl.microsoft.com/download/symbols”(按照这样设置,Win转载 2014-02-25 18:09:21 · 858 阅读 · 0 评论 -
PspCidTable进程枚举
-------------------------------------这是分割线---------------------------------------Windows句柄表格式 句柄是Windows对象管理中引入的一个东西,它的实际意义是对象在句柄表中的索引。Windows2000使用的是固定的三层句柄表,而WindowsXP和Windows2003都是使用的动态可扩展的转载 2014-02-25 15:44:36 · 1448 阅读 · 0 评论 -
WINDOWS进程或线程号为什么是4的倍数(PspCidTable的含义)
今天看到一篇文章作者问为什么System进程号是4.记得之前在《windows内核原理与实现》里面看过,但是就是想不起来了。搜集了一些资料解释了原因。 原来进程Id和线程Id都是基于全局的句柄表PspCidTable生成,也就是句柄表的索引号。句柄表除了作为对象引用的容器以外,还有另一个用法:作为分配进程和线程的唯一ID 的有效手段。进程有一个唯一ID,称为UniqueProcess转载 2014-02-25 11:55:55 · 956 阅读 · 0 评论 -
浅谈windows句柄表
http://blog.csdn.net/ithzhang/article/details/8708299windows定义了很多内核对象:进程对象、线程对象、互斥量对象、信号量对象、事件对象、文件对象等等。在调用相应的函数创建这些对象后,我们都可以通过HANDLE类型的句柄来引用它们。或许你在一些书上看到过说句柄相当于指针,它指向具体的对象。在某种程度上来说这是不错的,但是进一步深入探究转载 2014-02-24 12:07:28 · 588 阅读 · 0 评论 -
2.2.1 Windows 内核结构
《Windows内核原理与实现》第2章Windows 系统总述,本章将简要地介绍WRK(Windows Research Kernel),这是Microsoft 提供的一套可以编译和运行的Windows 内核源代码,本书后面章节的绝大多数讲解都将参考WRK 中的源代码。本节为大家介绍Windows 内核结构。2.2.1 Windows 内核结构正如图2.2 所示,Windows 内核分为三转载 2014-02-24 17:07:48 · 757 阅读 · 0 评论 -
windows进程句柄表
一.介绍1.什么是句柄句柄windows应用程序用来表示资源的一个符号,几乎所有的资源对于应用程序来说都表示为一个句柄。比如文件,用CreateFile打开一个文件,成功则会得到一个句柄,其实就是一个32位无符号整数。“当一个进程根据名称来创建或者打开一个对象时,他收到一个句柄,然后通过此举并来访问该对象。”(深入解析windows操作系统,P135)。这里HANDLE类型的作转载 2014-02-24 15:46:13 · 1647 阅读 · 0 评论 -
句柄含义
句柄,是整个windows编程的基础,一个句柄是指使用的一个唯一的整数值,是指一个四字节长的数值,用于标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等,应用程序能够通过句柄访问相应的对象的信息。但是,句柄不是一个指针,程序不能利用它句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。 句柄是windows用来标志转载 2014-02-24 14:19:36 · 1730 阅读 · 0 评论 -
实模式和保护模式区别及寻址方式
出处:http://blog.csdn.net/rosetta64KB-4GB-64TB? 我记得大学的汇编课程、组成原理课里老师讲过实模式和保护模式的区别,在很多书本上也有谈及,无奈本人理解和感悟能力实在太差,在很长一段时间里都没真正的明白它们的内含,更别说为什么实模式下最大寻址空间为1MB?段的最大长度不超过64KB?而保护模式下为啥最大寻址能力就变成了64TB?每个段最大也转载 2014-02-10 16:29:25 · 627 阅读 · 0 评论 -
Windows XP 与 Windows 2000 句柄表(增加个人注解)
“句柄”:是一个32位值,它是在句柄表中的索引,但它的含义丰富些。“句柄表”:是一个围绕“三层表”概念的表。它有两种,一个是EPROCESS的,一个是PspCidTable的。(EPROCESS的ObjectTable成员是指向HANDLE_TABLE的指针。PspCidTable(未导出)是指向HANDLE_TABLE指针的指针。)XP与2000对它们的管理有所不同。一、转载 2014-02-25 17:57:41 · 1438 阅读 · 2 评论 -
windbg学习21(!handle和!cs)
1.查看句柄信息!handle!handle 扩展显示目标系统中一个或所有进程拥有的句柄的信息[cpp] view plaincopy0:001> !handle Handle 4 Type Directory Handle 8 Type File Handle c Type File转载 2014-02-26 12:48:04 · 2094 阅读 · 0 评论 -
屏幕保护等待时间灰色
由于未知原因,我的机器不能自动锁屏了。原本,自动锁屏是通过屏幕保护程序配合激活时需要密码来进行的,但是现在屏幕保护的时间没的选了,灰色,固定为 60 分钟。看到这里: http://ibm.chick.blog.163.com/blog/static/144201610201331893840580/ 第1步:在注册表编辑器中展开HKEY-CURRENT-USER\Softwa转载 2015-01-13 15:02:07 · 12317 阅读 · 0 评论 -
谈谈windows线程栈
当系统创建线程时会为线程预订一块地址空间区域,注意仅仅是预订。默认情况下预定的这块区域的大小是1MB,虽然预订这么多,但是系统并不会给全部区域调拨物理存储器。默认情况下,仅仅为两个页面挑拨。x86系统下每个页面是4KB.其他页面会在访问的时候由系统调拨。这仅仅是在创建线程时,程序员指定CreateThread的第二个参数StackSize为0时才会发挥作用。如果程序员传入的是非零值,那么调拨的物理转载 2014-02-18 15:40:46 · 630 阅读 · 0 评论 -
【WIndows核心编程学习笔记】线程栈
系统在用户进程的地址空间中预订区域的情况有:分配进程环境块、分配线程环境块以及分配线程栈。下面主要讲解线程栈的分配。当系统创建线程的时候,会为线程栈预订一块地址空间区域(每个线程都有自己的栈),并给区域调拨一些物理存储器。在默认情况下:预订1MB的地址空间,调拨2个页面。在构建应用程序时开发人员可以通过两种方法来改变该默认值:(1)使用Microsoft C++编译器的转载 2014-02-18 15:35:19 · 647 阅读 · 0 评论 -
windows多线程CreateThread与_beginthreadex本质区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_beginthreadex? 使用多线程其实是非常容易的,下面这个程序的主线程会创建了一个子线转载 2014-02-18 11:52:49 · 554 阅读 · 0 评论 -
多线程 - 你知道线程栈吗(私有栈)
问题1. local 变量的压栈和出栈过程void func1(){ int a = 0; int b = 0;}系统中有一个栈顶指针,每次分配和回收local 变量时,其实就是移动栈指针。2. static local变量的分配风险void func2(){ static int a = 0;}这个变量a可能会被分配多次,因为如果转载 2014-02-17 17:48:36 · 2781 阅读 · 0 评论 -
线程堆栈的理解
一个线程的开销包括: 内核模式下的开销(内核堆栈,对象管理所需内存) 用户模式下的开销(线程局部存储、线程环境块、堆栈、CRT、MFC、COM等等等等) 通常,线程数目的瓶颈在于线程自己的堆栈。Visual C++编译器默认设置是每个线程的堆栈大小是1MB。当然,如果你在创建线程时指定较小的堆栈大小,你应该可以创建较多的线程。 但转载 2014-02-17 17:19:10 · 1132 阅读 · 0 评论 -
线程堆栈
线程堆栈大小http://blog.csdn.net/nokianasty/article/details/7600321C++内存分布http://blog.csdn.net/morewindows/article/details/6851681线程堆栈分布http://bbs.csdn.net/topics/390391357在看了这三篇的讨论后,对于线程堆栈,内存分布等有了一点了转载 2014-02-17 17:14:34 · 670 阅读 · 0 评论 -
windbg 学习笔记 FOR 内核调试(三) --进程句柄表HANDLE_TABLE
想当年 初学核编 , 阅读第三章的内核对象的时候跟看天书没什么感觉 死命在想到底内核对象 , 句柄是个什么东西 干嘛用的 于是我们工作室的老大就对我说 这篇看过就过了 学到后面你自然会明白的 我想也是 , 很多时候感觉学东西的确是这样 暂时看不懂的先放着 过段时间再看回来就恍然大悟了 . 我前段时间又看了下核编的第三章 唯一的收获就是能够大概了解到 hanle 这个所谓的索引的作转载 2014-02-25 18:11:27 · 2307 阅读 · 0 评论 -
使用内核调试器
介绍 在这篇教程中,我们将会讲述内核调试器的几个基本特性,然后去掌握它。很明显,我们不能涉及到方方面面,所以我们只会概括到其中几个方面,然后让你熟悉调试器的使用。我希望这篇文章能对你有帮助。设置 为了设置内核调试器,你需要像第一章那样修改BOOT.INI文件。/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200是我们需要设置的选项。如果你不设置速度,默转载 2014-02-26 18:05:40 · 1817 阅读 · 0 评论 -
[汇编理论]80x86保护模式
http://blog.csdn.net/feijj2002_/article/details/618721#t33一.保护方式简介80386有三种工作方式:实模式,保护模式和虚拟8086模式。本文介绍保护方式下的80386及相关的程序设计内容。实模式下的80386寄存器,寻址方式和指令等基本概念,除特别说明外在保护方式下仍然保持。尽管实方式下80386的功能要大大超过其先转载 2014-02-10 16:30:41 · 711 阅读 · 0 评论 -
高速缓冲寄存器(转自whowin博客)
实际上,不管是在实模式还是在保护模式下,CPU都会把一个分段的基地址放在一组隐藏的寄存器中,这组隐藏的寄存器,对程序员是不可见的,程序也是无法直接存取的,但却是实际存在的,这组隐藏的寄存器叫做描述符高速缓存寄存器(Descriptor Cache Registers),当段寄存器的值发生变化时,段的基地址、段的边界以及存取属性(存取权限)都会被重新加载到这个段寄存器对应的高速缓存中,为增强性能,C转载 2014-02-08 17:16:27 · 636 阅读 · 0 评论 -
为什么要内存对齐?字节对齐和边界对齐介绍。
大家都知道一个byte是8个bit,而现在流行的32位机指的是一次可以存取32个bit,也就是4个byte,在这种情况下,最有效率的作法当然是一次读4个byte。也就是即便你只取一个byte的内容,实际上,机器一次也是取了4个byte,然后把其中的一个byte给你。当然取4个byte并不是随机组合的,而是按照一定的次序,比如一次取0、1、2、3四个单元的内容,下次访问就是4、5、6、7。由转载 2014-01-21 14:30:28 · 3961 阅读 · 1 评论 -
银行家算法
银行家算法维基百科,自由的百科全书银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。目录1背景2处理程序[1]3安全和不安全的状态4伪代码(pseudo-co转载 2014-01-20 17:58:50 · 919 阅读 · 0 评论 -
进程死锁
进程死锁目录1产生死锁的原因2产生死锁的四个必要条件3预防死锁的产生如果多个进程同时占有对方需要的资源而同时请求对方的资源,而它们在得到请求之前不会释放所占有的资源,那么就会导致死锁的发生,也就是进程不能实现同步。1产生死锁的原因产生死锁的原因可归结为如下两点:(1)竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以转载 2014-01-20 17:24:06 · 631 阅读 · 0 评论 -
僵尸进程
In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for it, is called a zombie. 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先转载 2014-01-26 16:08:43 · 677 阅读 · 0 评论 -
互斥锁、自旋锁和读写锁
一、互斥锁对于多线程的程序,访问冲突的问题是很普遍的,解决的办法是引入互斥锁(Mutex,MutualExclusive Lock),获得锁的线程可以完成“读-修改-写”的操作,然后释放锁给其它线程,没有获得锁的线程只能等待而不能访问共享数据,这样“读-修改-写”三步操作组成一个原子操作,要么都执行,要么都不执行,不会执行到中间被打断,也不会在其它处理器上并行做这个操作。Mutex用p转载 2014-01-17 14:45:44 · 2293 阅读 · 0 评论 -
管程的通俗理解
信号量机制的引入解决了进程同步的描述问题,但信号量的大量同步操作分散在各个进程中不便于管理,还有可能导致系统死锁。如:生产者消费者问题中将P、V颠倒可能死锁。为此Dijkstra于1971年提出:把所有进程对某一种临界资源的同步操作都集中起来,构成一个所谓的秘书进程。凡要访问该临界资源的进程,都需先报告秘书,由秘书来实现诸进程对同一临界资源的互斥使用。管程定义了一个数据结构和能为并发进转载 2014-01-17 16:24:31 · 3018 阅读 · 1 评论 -
自旋锁应用
自旋锁一、为什么用自旋锁操作系统锁机制的基本原理,就是在某个锁操作过程中不能与其他锁操作交织执行,以免多个执行路径对内核中某些重要的数据及数据结构进行同时操作而造成混乱。在不同的系统环境中,根据系统特点和操作需要,锁机制可以用多种方式来实现。以Linux为例,其系统内核的锁机制一般通过3 种基本方式来实现,即原语、关中断和总线锁。在单CPU系统中,CPU 的读—修改—写原语可以转载 2014-01-17 15:33:50 · 1531 阅读 · 0 评论 -
深入理解linux自旋锁
最近在内核频繁使用了自旋锁,自旋锁如果使用不当,极易引起死锁,在此总结一下。自旋锁是一个互斥设备,它只有两个值:“锁定”和“解锁”。它通常实现为某个整数值中的某个位。希望获得某个特定锁得代码测试相关的位。如果锁可用,则“锁定”被设置,而代码继续进入临界区;相反,如果锁被其他人获得,则代码进入忙循环(而不是休眠,这也是自旋锁和一般锁的区别)并重复检查这个锁,直到该锁可用为止,这就是自旋的过程转载 2014-01-17 15:03:17 · 579 阅读 · 0 评论 -
自旋锁-搜搜百科
spin lock为了解决smp情况下资源的互斥访问,充分利用cpu的并行处理能力。原理smp多cpu系统情况下,一个cpu循环检测内存中某一个变量,待该变量符合一个条件以后原子的测试再修改后再跳出循环,进入临界区,保证对资源的操作序列化。自旋锁一般针对操作系统,应用程序库中的自旋锁不是为了保证cpu的互斥访问,因为应用程序总是可以被转载 2014-01-17 15:19:13 · 795 阅读 · 0 评论 -
BIOS入口地址:FFFF:0000是指什么意思?在物理上是指内存条的什么位置?
问题:“当我们按下电源开关时,电源开始供电,芯片组撤去RESET信号,CPU马上就从地址FFFF0H处开始执行指令,这个地址在系统BIOS的地址范围内,无论是Award BIOS还是AMI BIOS,放在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。”我想知道这个地址(FFFF0H)是内存的地址 还是主板BIOS地址?我自己是这样想的:1、系统硬件(系统bios、显卡转载 2014-02-07 15:40:54 · 8877 阅读 · 1 评论 -
保护模式之大观--查找物理地址
保护模式之大观翻来覆去看《一个操作系统的实现》中保护模式N遍,总算对其有了朦朦胧胧、隐隐约约的感觉。此时,突在网上发现此文,顿时间豁然开朗、神清气爽、抚掌废书而叹曰:真乃奇文也!欲知其玄妙究竟,那就慢慢看吧:)//以下内容为转载之转载//一级转载http://blog.csdn.net/littlehedgehog/article/details/2089504 文名:转载 2014-02-08 16:08:33 · 860 阅读 · 0 评论 -
第3节 段机制和描述符
2.3.1 段机制 在80386的段机制中,逻辑地址由两部分组成,即段部分(选择符)及偏移部分。 段是形成逻辑地址到线性地址转换的基础。如果我们把段看成一个对象的话,那么对它的描述如下: (1) 段的基地址(Base Address):在线性地址空间中段的起始地址。 (2)段的界限(Limit):表示在逻辑地址中,段内可以使用的最大偏移量。 (3)段的属性(Attr转载 2014-02-08 17:04:50 · 745 阅读 · 1 评论 -
描述符表和描述符高速缓存
在80x86的CPU里,描述符的概念实在是太重要了。 在实模式下,大家都知道物理地址是由段地址和偏移地址两部分组成,其公式如下: 物理地址 = 段地址× 16 + 偏移地址 或者:物理地址 = 段地址 + 偏移地址 其结果都是一样的,由于段地址和偏移地址的长度都是16位,所以这种方式能够表达的最大地址为:ffff:ffffH,也就是10ffefH(f转载 2014-02-08 12:05:22 · 1021 阅读 · 0 评论 -
DOS 实方式下直接访问4GB 内存
十堰市湖北汽车工业学院电气工程系(442002) 陈家祺摘 要: 分析了80486CPU 的寻址机制, 提出了在实方式下直接访问4GB 内存的策略和C 程序设计方法。关键词: DO S 程序 扩展内存 程序设计在高档PC 微机系统中, 如80486CPU 微机系统,应用软件的开发可以基于DO S 系统的实方式, 也可以基于W indow s 和O Sö2 系统的保护方式。转载 2014-02-08 10:51:27 · 1980 阅读 · 0 评论 -
80X86的物理地址形成(实模式+保护模式)——段式寻址
1.实模式80X86系列CPU中,最早的是8086,它有20根地址线,可以寻址1MB(2^20)内存空间。很自然地,如果CPU要跟主存交换信息,它也必须有20位的物理地址,但是,8086CPU内部是16位的结构,它里面跟地址有关的寄存器都是16位的(8086中跟地址有关的寄存器有五个:SI,DI,BP,SP,IP,前四个是变址寄存器,最后一个是指令指示器,它保存的是CPU将要执行的下一条指转载 2014-02-08 18:03:43 · 3532 阅读 · 1 评论 -
关于ROM BIOS的启动问题
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2078716&page=1&authorid=20499746>>1,而这里之后我开始不明白了。JMP要跳转到的位置是在高地址(4G末端)Flash Rom BIOS中还是在低地址(1M末端)的shadow BIOS呢?肯定跳转的目标在1M+64k以下,不会到4G末端。因为转载 2014-02-08 17:58:21 · 2126 阅读 · 0 评论 -
关于从保护模式切换到实模式的相关说明
参考于渊的《自己动手写操作系统》第三章中从实模式切换到保护模式。在由保护模式切换到实模式之前,用normal选择子对段寄存器进行填充。原因:在切换到实模式之前,把一个指向似乎没有用的数据段的描述符Normal的选择子装载到DS和ES。这是为什么呢?实模式下段描述符高速缓冲寄存器的内容段寄存器段基地址转载 2014-02-08 17:39:49 · 1243 阅读 · 0 评论