页表、地址重定位、地址保护的名词解释

简介: 页表、地址重定位、地址保护的名词解释

页表、地址重定位、地址保护的名词解释

页表:

我的解答:

页表是一种特殊的数据结构,放在系统空间的页表区,存放逻辑页与物理页帧的对应关系。 每一个进程都拥有一个自己的页表,PCB表中有指针指向页表。

老师的解答:

反映程序的逻辑页号和内存的物理块号映射关系的表。

地址重定位:

我的解答:

地址重定位指把目标程序中的逻辑地址转换成主存空间的物理地址。 其计算方法为:物理地址(PA)= 块号×页长+页内地址。

老师的解答:

把用户空间的逻辑地址转换成实际主存空间的物理地址的过程。

地址保护:

我的解答:

保护模式同实模式的根本区别是进程内存受保护与否。可寻址空间的区别只是这一原因的果。实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域,系统程序和用户程序没有区别对待,而且每一个指针都是指向"实在"的物理地址。这样一来,用户程序的一个指针如果指向了系统程序区域或其他用户程序区域,并改变了值,那么对于这个被修改的系统程序或用户程序,其后果就很可能是灾难性的。为了克服这种低劣的内存管理方式,处理器厂商开发出保护模式。这样,物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)要由操作系统转化为物理地址去访问。

老师的解答:

对用户程序、操作系统等地址空间的管理,防止程序间的代码保护。

每天一道算法题

最长连续不重复子序列

给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。

输入格式

第一行包含整数 n。

第二行包含 n 个整数(均在 0∼105 范围内),表示整数序列。

输出格式

共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。

数据范围

1≤n≤105

输入样例:

5

1 2 2 3 5

输出样例:

3

提交代码

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int a[N], s[N];
int n, res;
int main()
{
    cin >> n;
    for (int i = 0; i < n; ++ i) cin >> a[i];
    for (int i = 0, j = 0; i < n; ++ i)
    {
        s[a[i]] ++; // 记录下a[i]出现的次数
        while(s[a[i]] > 1)   // 一点碰见两个重复的元素后
        {  
            s[a[j]] --;  // 这里要主要的一点是这个算法是没有回溯的
                         // 不要被for循环里面的条件误导以为会回溯、
                         // 现在遇到两个相同的元素了
                         // !!! 现在是这个算法最厉害的地方 
                         // 这个j代表的是 j可以到达最左的地方 所以在j左边的
                         // 元素的个数就需要都-- 这点很妙
                         // 每次求的是 j到i之间的符合条件的最大值
            j ++;        // 然后j++
        }
        res = max(res, i - j + 1);  // 这个res的含义是 在i这个位置、
        // 可以达到的符合题目条件的最大长度
    }
    cout << res;
    return 0;
}
import java.io.*;
import java.util.*;
public class Main
{
    public static void main(String[] args) throws IOException{
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int [] a = new int [n + 10];
        int [] s = new int [n + 10];
        int res = 0;
        for (int i = 0; i < n; ++ i) a[i] = in.nextInt();
        for (int i = 0, j = 0; i < n; ++ i)
        {
            s[a[i]] ++;
            while(s[a[i]] > 1)
            {
                s[a[j]] --;
                j ++;
            }
            res = Math.max(res, i - j + 1);
        }
        System.out.println(res);
    }
}


相关文章
|
9月前
|
存储 缓存 算法
计算机存储体系中主存地址和 Cache 地址之间的转换工作由谁完成
计算机存储体系中主存地址和 Cache 地址之间的转换工作由谁完成
|
2月前
|
存储 芯片
什么是虚地址,什么是物理地址?
什么是虚地址,什么是物理地址?
38 0
|
2月前
页表有什么用?地址翻译过程是怎样的
页表有什么用?地址翻译过程是怎样的
|
2月前
|
索引
虚拟地址与物理内存地址是如何映射的
虚拟地址与物理内存地址是如何映射的
|
8月前
|
Linux 定位技术 虚拟化
【OSTEP】多道程序和时分共享 | 虚拟地址空间 | 用户栈vs内核栈 | 进程结构: struct thread | 虚拟vs物理地址空间 | 地址转换方案
【OSTEP】多道程序和时分共享 | 虚拟地址空间 | 用户栈vs内核栈 | 进程结构: struct thread | 虚拟vs物理地址空间 | 地址转换方案
25 0
|
程序员 索引
《操作系统真象还原》——0.9 物理地址、逻辑地址、有效地址、线性地址、虚拟地址的区别
物理地址就是物理内存真正的地址,相当于内存中每个存储单元的门牌号,具有唯一性。不管在什么模式下,不管什么虚拟地址、线性地址,CPU最终都要以物理地址去访问内存,只有物理地址才是内存访问的终点站。
2112 0
|
存储 算法 NoSQL
Linux下逻辑地址-线性地址-物理地址图解
Linux下逻辑地址-线性地址-物理地址图解
|
索引 Windows
虚拟地址到物理地址的转换步骤【转】
转自:http://www.cnblogs.com/RyanHuang/archive/2012/05/30/2525006.html 已知一个虚拟地址0x01AF5518, 则转换的过程如下:   注意: *这里讨论的以Windows下普通模式分页的情况, 也就是2级页表的情况* 1.
1071 0

热门文章

最新文章