在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table). 为什么要有GDT?我们首先考虑一下在Real Mode下的编程模型: 在Real Mode下,我们对一个内存地址的访问是通过Segment:Offset的方式来进行的,其中Segment是一个段的Base Address,一个Segment的最大长度是64 KB,这是16-bit系统所能表示的最大长度.而Offset则是相对于此Segment Base Address的偏…
1. private 只能在类内部使用 2. protected 可以在类内部和继承类里使用.类外部不能使用[即实例化后的对象无法调用] 3. public 全部范围适用. 4.子类复写父类中的方法时,子类中的 访问修饰符的范围要大于等于 父类的[ 继承只能发扬光大,至少保持不变.不可以丢失东西.]…
Java中的访问控制修饰符已经困惑笔者多时,其中较复杂的情况一直不能理解透彻.今天下定决心,系统.全面地研究Java中的访问控制修饰符的所有方面,并整理成这篇文章,希望有同样疑惑的读者读完后能有所收获.如果文章中出现错误,欢迎评论指出,共同交流~ 说在前面:这篇文章只研究Java中访问控制修饰符声明类的变量/方法的情况. 先抛出结论: * 成员变量/方法的访问权限 *                                        private        default  …
转自http://blog.csdn.net/a1237871112/article/details/50926975 及http://blog.csdn.net/blackmanren/article/details/9249381 俗话说没有规矩就没有方圆,java作为一门严谨的面向对象的高级编程语言,自然对权限整个重要的问题有严格的控制. Java一共有四种权限,private (私有),public(公有).Protected(受保护)还有友好型. 在java里,这些语句都可以修饰类中的…
java中的修饰符分类: 权限修饰符: private, default, protected, public 状态修饰符: static, final 抽象修饰符: abstract 权限修饰符 我们来看看四种权限修饰符的权限大小 (注意:没有default这个关键字,它就是代表默认的意思,即什么修饰符也不加) 一般,默认的可见性就是包可见性(package visibility) 1. public修饰符 具有最大的访问权限,可以访问任何一个CLASSPATH下的类,接口.异常等.它往往对于…
( c++默认class是private继承且class内的成员默认都是private struct 默认位public 继承,struct内成员默认是public  ) 三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 三种继承方式 public 继承 protect 继承 private 继承 组合结果 基类中 继承方式 子类中 public & public继承 => public public…
重点关注private与protected public 默认即为public,全局都可以访问,这个不解释 private C++, “private” 意为 “private to this class”, 但是Ruby中意为 “private to this instance”.意思是:C++中,对于类A,只要能访问类A,就能访问A的对象的private方法.Ruby中,却不行:你只能在你本对象的实例中访问本对象的private方法.因为Ruby的原则是“private意为你不能指定方法接收…
2.继承的访问控制: (比如一个类中的protected成员对于"不同的包中的非子类"是不可见的. 说明:1.任何public的内容可以被从任何地方访问. 2.private的成员不能被该类外看到. 3.如果一个成员不含有一个明确的访问说明,马克-to-win,它只对同包可见, 不同包不可见.这是默认访问. 4.protected是同包都可见,且子类都可见.又不同包同时又不是子类,就不可见. 以下就上表中的一些难于理解的知识点给出实例进行分析: 2.1 以下例子说明:1)子类可以访问p…
链接:http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/23/2514964.html…
|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言     在<操作系统篇-浅谈实模式与保护模式>中提到了两种模式,我们说在操作系统中,其实大部分时间是待在保护模式中的.因此若想理解操作系统程序中的启动相关的部分,必须要理解保护模式下的编程,而分段机制是保护模式编程下的基础.而且,由于实模式与保护模式的不同,对保护模式下的分段机制更需要注意. 二.线性地址 在保护模式下编程,访问内存时,需要在程序中给出段地址和偏移量,因为分段是保护模式的基本特征之一.传统上,段地址和偏移地址…
摘要 用BIOS方式启动计算机后,BIOS先读取引导扇区,引导扇区再从外部存储设备中读取加载器,加载器读取内核.进入内核后,把加载器中建立的GDT复制到内核中. 这篇文章的最大价值也许在末尾,对C语言指针的新理解. 是什么 在BOOT(引导扇区)加载LOADER(加载器). 在LOADER中初始化GDT.堆栈,把Knernel(内核)读取到内存,然后开启保护模式,最后进入Knernel并开始执行.操作系统正式开始运行了. GDT是CPU在保护模式下内存寻址必定会使用的元素,在Kernel执行过程…
网址:http://blog.csdn.net/billpig/article/details/5833980 保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成段描述符寄存器: 存储段描述符选择器:存储段描述符的索引 PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486中有6个(即CS,SS,DS,ES,FS,GS)80位的段寄存器,同时提供6个段左右机器当前运行的地址空间.由选择器CS对应表示的段仍为代码段,选择器SS对应表示的段仍为堆栈段 (1)全局…
1.分段机制 80386的两种工作模式  80386的工作模式包括实地址模式和虚地址模式(保护模式).Linux主要工作在保护模式下. 分段机制  在保护模式下,80386虚地址空间可达16K个段,每段大小可变,最大达4GB.  从逻辑地址到线性地址的转换由80386分段机制管理.段寄存器CS.DS.ES.SS.FS或GS标识一个段.这些段寄存器作为段选择器,用来选择该段的描述符. 分段逻辑地址到线性地址转换图  图9_7 分段逻辑地址到线性地址转换图 2. 分页机制 分页机制的作用  分页机制…
保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成段描述符寄存器: 存储段描述符选择器:存储段描述符的索引 PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486中有6个(即CS,SS,DS,ES,FS,GS)80位的段寄存器,同时提供6个段左右机器当前运行的地址空间.由选择器CS对应表示的段仍为代码段,选择器SS对应表示的段仍为堆栈段 (1)全局描述符表GDT(Global Descriptor Table)在整个系统中,全局描述符表GDT只有一张(一个处…
GDT全局描述符表 什么是GDT全局描述符表 GDT全称为Global Descriptor Table,全局描述符表. 保护模式的寻址方式不在使用寄存器分段的方式直接寻址方式了.而采用的是使用GDT(全局分段描述表)来寻址.从而使用更多的内存地址. 创建GDT全局描述符表使用到一个48位的寄存器:GDTR寄存器. 1)首先,在内存中划分一些内存段,并且每个内存段赋予一个索引. 2)然后,使用lgdt指令,设置GDT的索引和表信息的内存地址到GDTR寄存器. 3)进入保护模式,指令跳转,从实模式…
逻辑地址-------------->线性地址------------> 物理地址   分段 分页 GDT是[gobal (segment) descriptor table]的缩写,它保存所有segment的信息 内存管理时,不让多进程的程序出现内存冲突的一解决方案是Segmentation.4GB的内存可以任何分割,每块的初始地址都是0.另外还有一种复杂的内存管理方案,既Paging,目前主流的操作系统都是采用这种方式.本文的OS为了实现简单,只采用Segmentation方案. 我们规定…
写在前面 添油加醋系列第二弹--剖析GDT 头文件:https://github.com/bajdcc/MiniOS/blob/master/include/gdt.h 实现:https://github.com/bajdcc/MiniOS/blob/master/src/kernel/gdt.c 话说C语言的话除了刷刷OJ外,就是用来实现操作系统这个大头了.C语言比C++少了很多很多臃肿的语法特性,写起来非常优美(至少写操作系统是这样的).虽说C++有许多的奇技淫巧,一个算法有N种实现方法,但…
在实模式下开启4GB的物理内存地址寻址(称之为Big Real Mode) 通过A20快速门(Fast Gate)修改0x90端口的数据, 对其进行置位(类似于打开一个开关), 开启 使用CLI汇编指令关闭外部中断 使用lgdt加载保护模式需要的系统数据结构 置位cr0寄存器的值开启保护模式 进入保护模式 重新加载FS寄存器中的数据, 使其支持4GB的物理内存地址的寻址 立刻置位cr0寄存器的数据关闭保护模式 使用STI汇编指令开启外部中断 这样CPU就可以支持4GB的寻址了 注意: 该Big…
package com.Practice_FileWriter; import java.io.FileWriter; import java.io.IOException; public class JustPractice { public static void main(String[] args) throws IOException { //第一步,先建立一个可以向文件中写入数据的输出流对象,这一步的时候要给出写入文件的路径: FileWriter fw = new FileWrit…
今天更新github主页的过程中,想使用GAE部署一个Java Web服务来更好的支持网站动态性(关键是利用了免费的GAE资源),结果遇到了2个大问题. 1.GDT插件无法登陆GAE账户 错误1:登陆页白页,由eclipse无法访问google导致,可FQ并配置eclipse代理 在配置好eclipse/gdt/gae-sdk等环境后,发现错误1,gdt连google登陆页面都无法打开,那么首先要保证FQ成功,其次要设置ecipse网络代理,或者直接设置internet局域网代理. 错误2:能访…
引自:http://www.techbulo.com/708.html 一.引入 保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成 段描述符寄存器: 存储段描述符 选择器:存储段描述符的索引 段寄存器 PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486中有6个(即CS,SS,DS,ES,FS,GS)80位的段寄存器.由选择器CS对应表示的段仍为代码段,选择器SS对应表示的段仍为堆栈段. 二.详解 先说明一下概念 (1)全局描述符表GDT(Global…
ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现. HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一…
一.Java中流的原理 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行.设备可以是文件,网络,内存等. 四种基本流InputStream,OutputStream,Reader,Writer又分别有更具体的子类,分为文件流,缓冲流,数据流,转换流,Print流,Object流 等,都分别有特定的功能或用来操作特定的数据. 二.字节流     2.1 InputStream 继承自InputStream的流用于向程序中输入数据,且数据的单位…
在学习笔记(1)中,我们学习了IRP的数据结构的相关知识,接下来我们继续来学习内核中很重要的另一批数据结构: EPROCESS/KPROCESS/PEB.把它们放到一起是因为这三个数据结构及其外延和windows中进程的表示关系密切,我们在做进程隐藏和进程枚举的时候一定会涉及到这3类数据结构,所以这里有必要及时做一下总结,做个学习笔记,理清思路. 1. 相关阅读材料 <windows 内核原理与实现> --- 潘爱民 <深入解析windows操作系统(第4版,中文版)> --- 潘…
這只是一篇求真務實言簡意賅的菜鳥日記 記錄了碼盲在OSX 中為Github添加 ssh 的過程 要從 Github 上克隆個源碼到本地,發現無 ssh 密鈅 於是開到官網幫助照貓畫虎如下: 1.打開 shell 鍵入 ls -al ~/.ssh 2.回顯中若有成對得 .pub 於 rsa 存在可以下跳 3.否則創見一個新的 -C "汝的Email帳號" (大小寫敏感,最後一個 C 是大寫),回顯 too many argument 一般都是大小寫問題 3.回顯 Enter file i…
现代WEB服务器都支持大文件分段下载,加快下载速度,判断WEB服务器是否支持分段下载通过返回头是否有 Accept-Ranges: bytes 字段.分段下载分为两种,一种就是一次请求一个分段,一种就是一次请求多个分段.下面会一一讲解. 请求分段中的一部分 请求头部添加如下字段,0-1024代表文件最前面的1025个字节 Range: bytes=0-1024 Range字段支持的写法 Range: bytes=0-1024 获取最前面1025个字节 Range: bytes=-500 获取最后…
有時我們在開發Windows 桌面應用程式時,會發生一些弔詭的事情,作業系統位元數就是一個蠻重要的小細節,若您寫的應用程式在Windows 的32bit 作業系統上可以完美的運行,但不見得在64bit上的作業系統可以正常的執行喔!!這時就需要判斷作業系統的位元數來作應映的對策! 本篇文章將引導您如何使用C#判斷是多少bit的作業系統 32bit or 64bit. 以下程式碼為SUKI本人在網路上爬文,經過一番折騰,找到最簡短的程式碼,提供有需要的人使用! /// <summary> ///…
GDT(全局描述符表)本身并不是一个段,而是线性地址空间的一个数据结构.GDT的线性地址和长度必须加载进GDTR寄存器中.LDT(局部描述符表)存放在LDT类型的系统段中.此时GDT必须含有LDT的段描述符.如果系统支持多LDT的话那么每个LDT都必须在GDT中有一个段描述符和段选择符.LDT的段描述符可以在GDT的任何地方. 段选择符 段选择符是段的一个16位标识符.段选择符并不直接指向段而是指向段描述符表中第一的段描述符.段选择符3个字段内容: 1.请求特权级RPL   提供了保护信息. 2…
在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释. 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁. 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的…
GDT的由来:     在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table). 为什么要有GDT?我们首先考虑一下在Real Mode下的编程模型:在Real Mode下,我们对一个内存地址的访问是通过Segment:Offset的方式来进行的,其中Segment是一个段的Base Address,一个Segment的最大长度是64 KB,这是16-bit系统所能表示的最大长度.而Offset则是相对于此Segment Bas…