虚拟地址到物理地址的转换

虚拟地址到物理地址的转换,第1张

对于一个虚拟地址,我们如何能够实现到物理地址的转换呢?

我们知道,虚拟地址 = 高10位在页目录表中的偏移量(页目录项pde)+中间10位在页表中的偏移量(页表项pte)+物理页的偏移,因此,如果我们能够获取到虚拟地址所对应的pte的物理地址,那么根据该物理地址和虚拟地址中物理页的偏移量进行结合,就能够得到虚拟地址所对应的真实物理地址。

因为我们起初设计的时候,在页目录项的第1023项中存放的是页目录表的物理地址,我们可以根据此特定来构造出虚拟地址所对应的pte的物理地址。

uint32_t* pte = (uint32_t*)(0xffc00000 + ((vaddr &0xffc00000) >>10) + ((vddr &0x003ff000) >>12) * 4)

其中的第一部分0xffc00000是通过虚拟地址的高10位进行回环,回到自身页目录表的地址,第二项vaddr &0xffc00000) >>10是再用页目录项pde(页目录内页表的索引)做为pte的索引访问到页表,((vddr &0x003ff000) >>12)再用pte的索引做为页内偏移。

这样我们就得到的虚拟地址对应的页表项的物理地址,最后我们根据 ((*pte &0xfffff000) + (vaddr &0x00000fff)),来找到物理页中所对应的那、个内存地址

.

1、创建触发器

例如CREATE OR REPLACE TRIGGER CHK_IP_LHR

AFTER LOGON ON DATABASE

DECLARE

V_IPADDRVARCHAR2(30)

V_LOGONUSER VARCHAR2(60)

BEGIN

SELECT SYS_CONTEXT('USERENV', 'IP_ADDRESS'),

SYS_CONTEXT('USERENV', 'SESSION_USER')

INTO V_IPADDR, V_LOGONUSER

FROM DUAL

IF V_IPADDR LIKE ('192.168.59.%') THEN

RAISE_APPLICATION_ERROR('-20001', 'User '||V_LOGONUSER||' is not allowed to connect from '||V_IPADDR)

END IF

END

2、或者利用sqlnet.ora

修改$OREACLE_HOME/network/admin/sqlnet.ora

tcp.validnode_checking=yes

#允许访问ip

tcp.inited_nodes=(ip1,ip2,……)

#不允许访问的ip

tcp.excluded_nodes=(ip1,ip2,……)

3、利用iptables防火墙

vi /etc/sysconfig/iptables增加

-A INPUT -s 172.16.10.1 -i eth0 -p tcp -m tcp --dport 1521 -j ACCEPT


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10870396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存