精华内容
下载资源
问答
  • 爸爸可向盘放苹果也可向盘放桔子,儿子专等吃盘的桔子,女人专等吃盘的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。 分析:同步和互斥问题 1....

    一、哲学家进餐问题

    二、读者-写者问题

    三、举例说明


    一、哲学家进餐问题

    由Dijkstra提出并解决的哲学家进餐问题(The Dinning Philosophers Problem)是典型的同步问题

    问题是描述有五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五只筷子,他们的生活方式是交替地进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐。进餐毕,放下筷子继续思考。

    1.利用记录型信号量解决哲学家解决问题

    经分析可知,放在桌子上的筷子是临界资源,在一段时间内只允许一位哲学家使用。为了实现对筷子的互斥使用,可以用一个信号量表示一只筷子,由这五个信号量构成信号量数组。其描述如下:

    semaphore chopstick[5]={1,1,1,1,1};    
    所有的信号量均被初始化为1,
    第i位哲学家的活动可描述为:
    do{
        wait(chopstick[i]);
        wait(chopstick[(i+1)%5]);
        …
        //eat
        signal(chopstick[i]);
        signal(chopstick[(i+1)%5]);
        …
        //think
        …
    }while(TRUE);

    在以上描述中,当哲学家饥饿时,总是先去拿他左边的筷子,即执行wait(chopstick[i]);成功后,再去拿他右边的筷子,即执行wait(chopstick[(i+1)%5]);又成功后便可进餐。进餐毕,又先放下他左边的筷子,然后再放他右边的筷子。虽然,上述解法可保证不会有两个相邻的哲学家同时进餐,但却有可能引起死锁。假如五位哲学家同时饥饿而各自拿起左边的筷子时,就会使五个信号量chopstick均为0;当他们再试图去拿右边的筷子时,都将因无筷子可拿而无限期地等待。

    对于这样的死锁问题,可采取以下几种解决方法

    (1)至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕时能释放出他用过的两只筷子,从而使更多的哲学家能够进餐。

    (2)仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐。

    (3)规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;而偶数号哲学家则相反。按此规定,将是1、2号哲学家竞争1号筷子;3、4号筷子竞争3号筷子。即五位哲学家都先竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有一位哲学家能获得两只筷子而进餐。

    2.利用AND信号量机制解决哲学家进餐问题

    在哲学家进餐问题中,要求每个哲学家先获得两个临界资源(筷子)后方能进餐,这在本质上就是前面所介绍的AND同步问题。故用AND信号量机制可获得最简洁的解法。

    semaphore chopstick[5]={1,1,1,1,1};    
    do{
        …
        //think
        …
        Swait(chopstick[(i+1)%5],chopstick[i]);
        …
        //eat
        …
        Signal(chopstick[(i+1)%5],chopstick[i]);
    }while(TRUE);

    二、读者-写者问题

    读者-写者(Reader-Writer Problem)问题是指保证一个Writer进程必须与其他进程互斥地访问共享对象的同步问题。读者-写者问题常被用来测试新同步原语。

    1.利用记录型信号量解决读者-写者问题

    为实现Reader与Writer进程间在读或写时的互斥而设置了一个互斥信号量wmutex。另外,再设置一个整型变量readcount表示正在读的进程数目。由于只要有一个Reader进程在读,便不允许Writer进程去写。因此,仅当readcount=0,表示尚无Reader进程在读时,Reader进程才需要执行wait(wmutex)操作。若wait(wmutex)操作成功,Reader进程便可去读,相应地,做readcount+1操作。同理,仅当Reader进程在执行了readcount减1操作后其值为0时,才须执行signal(wmutex)操作,以便让Writer进程写操作。又因为readcount是一个可被多个Reader进程访问的临界资源,因此,也应该为它设置一个互斥信号量rmutex。

    读者-写者问题可描述如下:

    semaphore rmutex=1,wmutex=1;
    int readcount=0;
    void reader(){
        do{
            wait(rmutex);
            if(readcount==0)
                wait(wmutex);
            readcount++;
            signal(rmutex);
            …
            perform read operation;
            …
            wait(rmutex);
            readcount--;
            if(readcount==0)
                signal(wmutex);
            signal(rmutex);
        }while(TRUE);
    }
    void Writer(){
         do{
            wait(wmutex);
            perform write operation;
            signal(wmutex);
         }while(TRUE);
    }
    void main(){
        cobegin
            Reader();
            Writer();
        coend
    }

    2.利用信号量集机制解决读者-写者问题

    这里的读者-写者问题,与前面的略有不同,它增加了一个限制,即最多只允许RN个读者同时读。为此,又引入了一个信号量L,并赋予其值为RN,通过执行wait(L,1,1)操作来控制读者的数目,每当有一个读者进入时,就要先执行wait(L,1,1)操作,使L的值减1。当有RN个读者进入读后,L便减为0,第RN+1个读者要进入读时,必然会因wait(L,1,1)操作失败而阻塞。

    对利用信号量集来解决读者-写者问题的描述如下:

    int RN;
    semphore L=RN,mx=1;
    void Reader(){
        do{
            Swait(L,1,1);
            Swait(mx,1,0);
            …
            perform read operation;
            …
            Ssignal(L,1);
        }while(TRUE);
    }
    void Writer(){
        do{
            Swait(mx,1,1;L,RN,0);
            perform write operation;
            Ssignal(mx,1);
        }while(TRUE);
    }
    void main(){
        cobegin
            Reader();
            Writer();
        coend
    }

    其中,Swait(mx,1,0)语句起着开关的作用。只要无writer进程进入写操作,mx=1,reader进程就都可以进入读操作。但只要一旦有writer进程写操作时,其mx=0,则任何reader进程就都可以进入读操作。Swait(mx,1,1,L,RN,0)语句表示仅当既无writer进程在写操作(mx=1)、又无reader进程在读操作(L=RN)时,writer进程才能进入临界区进行写操作。

    三、举例说明

    1.桌子上有一空盘,允许放一只水果。爸爸可向盘中放苹果也可向盘中放桔子,儿子专等吃盘中的桔子,女人专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。

    分析:同步和互斥问题

    1.考虑同步情况即所有的“等待情况”:

    ①爸爸要等待盘子为空;
    ②儿子要等待盘中水果为桔子;
    ③女儿要等待盘中水果为苹果。

    2.互斥

    看起来盘子好像是要作互斥处理的,但由于题目中的爸爸、儿子、女儿均只有一个,并且他们访问盘子的条件都不一样,所有他们根本不会同时去访问盘子,因此盘子也就不用作互斥处理了。

    并发进程同步描述如下:

    设置3个信号量,信号量Orange表示盘中有桔子,初值为0;信号量Apple表示盘中有苹果,初值为0;信号量EmptyDish表示盘子为空,初值为1。

    int Orange=0,Apple=0,EmptyDish=1;
    main(){
        cobegin
            father();
            son();
            daughter();
        coend
    }
    father(){
        while(1){
            P(EmptyDish);
            将水果放入盘中;
            if(放入的水果是桔子)
                V(Orange);
            else
                V(Apple);
        }
    }
    son(){
        while(1){
            P(Orange);
            从盘中取出桔子;
            V(EmptyDish);
            吃桔子;
        }
    }
    daughter(){
        while(1){
            P(Apple);
            从盘中取出苹果;
            V(EmptyDish);
            吃苹果;
        }
    }

    2.设公共汽车上,司机和售票员的活动分别是:

    在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用信号量和P、V操作实现他们的同步。

    分析:

    ①确定进程间的同步关系。在汽车行驶过程中,售票员关车门后,向司机发出开车信号,司机接到开车信号后启动车辆;在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客下车。
    ②确定信号量及其值。由于司机和售票员之间要互通消息,司机进程设置一个私有信号量run,用于判断司机能否进行工作,初值为0;售票员进程设置一个私有信号量stop,用于判断是否停车,售票员是否能够打开车门,初值为0。

    同步描述如下:

    int run=0,stop=0;
    main(){
        parbegin
            driver();
            busman();
        parend
    }
    driver(){
        while(1){
            P(run);
            启动车辆;
            正常行车;
            到站停车;
            V(stop);
        }
    }
    busman(){
        while(1){
            关车门;
            V(run);
            售票;
            P(stop);
            开车门;
            下乘客;
        }
    }

     

    展开全文
  • 计算机操作系统PV原语分析PV原语PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。 信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的...

    计算机操作系统PV原语分析

    PV原语

    PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。  信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前可用资源的数量。有两种实现方式:1)semaphore的取值必须大于或等于0。0表示当前已没有空闲资源,而正数表示当前空闲资源的数量;2) semaphore的取值可正可负,负数的绝对值表示正在等待进入临界区的进程个数。

    信号量是由操作系统来维护的,用户进程只能通过初始化和两个标准原语(P、V原语)来访问。初始化可指定一个非负整数,即空闲资源总数。

    P原语:P是荷兰语Proberen(测试)的首字母。为阻塞原语,负责把当前进程由运行状态转换为阻塞状态,直到另外一个进程唤醒它。操作为:申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞;

    V原语:V是荷兰语Verhogen(增加)的首字母。为唤醒原语,负责把一个被阻塞的进程唤醒,它有一个参数表,存放着等待被唤醒的进程信息。操作为:释放一个被占用的资源(把信号量加1),如果发现有被阻塞的进程,则选择一个唤醒之。

    具体PV原语对信号量的操作可以分为三种情况:

    1)把信号量视为一个加锁标志位,实现对一个共享变量的互斥访问。

    实现过程:

    P(mutex); // mutex的初始值为1 访问该共享数据;

    V(mutex);

    非临界区

    2)把信号量视为是某种类型的共享资源的剩余个数,实现对一类共享资源的访问。

    实现过程:

    P(resource); // resource的初始值为该资源的个数N 使用该资源;

    V(resource); 非临界区

    3)把信号量作为进程间的同步工具

    实现过程:

    临界区C1;

    P(S);

    V(S);

    临界区C2;哲学家问题PV原语程序

    2009年03月10日 星期二 21:29设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子。但是,桌子上总共只有5支筷子,在每人两边分开各放一支。哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就餐。条件:(1) 只有拿到两支筷子时,哲学家才能吃饭。(2) 如果筷子已在他人手上,则该哲学家必须等待到他人吃完之后才能拿到筷子。(3) 任一哲学家在自己未拿到两支筷子吃饭之前,决不放下自己手中的筷子。试:(1) 描述一个保证不会出现两个邻座同时要求吃饭的通信算法。(2) 描述一个既没有两邻座同时吃饭,又没有人饿死(永远拿不到筷子)的算法。(3) 在什么情况下,5 个哲学家全部吃不上饭?解答:(1)、设信号量c[0]~c[4],初始值均为1,分别表示i号筷子被拿(i=0,1,2,3,4),send(i):第i个哲学家要吃饭beginP(c[i]);P(c[i+1 mod 5]);eat;V(c[i+1 mod 5]);V(c[i]);End;该过程能保证两邻座不同时吃饭,但会出现5个哲学家一人拿一只筷子,谁也吃不上饭的死锁情况.(2)、解决的思路如下:让奇数号的哲学家先取右手边的筷子,让偶数号的哲学家先取左手边的筷子.这样,任何一个哲学家拿到一只筷子之后,就已经阻止了他邻座的一个哲学家吃饭的企图,除非某个哲学家一直吃下去,否则不会有人会饿死.send(i):第i个哲学家要吃饭BeginIf i mod 2==0 then{P(c[i]),P(c[i+1 ]mod 5))eat;V(c[i],c[i+1 mod 5])}Else{ P(c[i+1 mod 5])P(c[i])EatV(c[i+1 mod 5])V(c[i])}EndPV原语实现互斥与同步

    2008年09月19日 星期五 17:28

    PV原语的含义  P操作和V操作是不可中断的程序段,称为原语。PV原语及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的。信号量sem是一整数,sem大于等于零时代表可供并发进程使用的资源实体数,但sem小于零时则表示正在等待使用临界区的进程数。  P原语操作的动作是:  (1)sem减1;  (2)若sem减1后仍大于或等于零,则进程继续执行;  (3)若sem减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。  V原语操作的动作是:  (1)sem加1;  (2)若相加结果大于零,则进程继续执行;  (3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。  PV操作对于每一个进程来说,都只能进行一次,而且

    展开全文
  • 计算机操作系统PV原语分析,介绍PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序……
  • 操作系统PV原语练习(2)

    千次阅读 2018-11-13 11:25:17
    题目描述: 有一个仓库,可以存放A 和B 两种产品,但要求: (1)每次只能存入一种产品(A 或B); (2)-N产品数量-B 产品数量。...题目限制(2)主要可以解毒为,相邻的连续放A的次数,连续...
    题目描述:
    有一个仓库,可以存放A 和B 两种产品,但要求:
    (1)每次只能存入一种产品(A 或B);
    (2)-N<A 产品数量-B 产品数量<M。其中,N 和M 是正整数。
    试用同步算法描述产品A 与产品B 的入库过程。
    思路如下:
    题目中没有说仓库的大小,假设默认是无限量
    每次能存放一个产品,互斥的访问仓库,设置一个仓库的互斥信号量
    题目中限制(2)主要可以解毒为,相邻的连续放A的次数,连续放B的次数,两者之差要符合要求
    分别设置两个信号量即可,初值分贝为A的信号量为M ,B的信号量为N
    信号量A初始值-B的最小值要=M 而初始B的最小值为0,得到A信号量值为M
    同理得到信号量B
    比如放A要A先获取其自己信号量,成功放了后,增加B的信号量
    B类似
    这样的流程就能保证约束(2)
    

    代码如下:

    public class Problem_07 {
    
        public static void main(String argv[]){
            new Thread(new A()).start();
            new Thread(new B()).start();
        }
    
        private static class DB{
            public static final int aMaxSeqSize = 5;
            public static final int bMaxSeqSize = 3;
            public static Semaphore dbMutexSem = new Semaphore(1);
            public static Semaphore aSeqSizeSem = new Semaphore(aMaxSeqSize);
            public static Semaphore bSeqSizeSem =  new Semaphore(bMaxSeqSize);
        }
    
        private static class A implements Runnable{
            @Override
            public void run() {
                for(int loop=0; loop<10; loop++){
                    try {
                        DB.aSeqSizeSem.acquire();
                        DB.dbMutexSem.acquire();
                        System.out.printf("A\n");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } finally {
                        DB.dbMutexSem.release();
                        DB.bSeqSizeSem.release();
                    }
                }
            }
        }
    
        private static class B implements Runnable{
            @Override
            public void run() {
                for(int loop=0; loop<10; loop++){
                    try {
                        DB.bSeqSizeSem.acquire();
                        DB.dbMutexSem.acquire();
                        System.out.printf("B\n");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } finally {
                        DB.dbMutexSem.release();
                        DB.aSeqSizeSem.release();
                    }
                }
            }
        }
    }
    

     

    展开全文
  • 操作系统中PV原语

    2021-03-08 20:30:06
    一:桌上有1空盘,允许存放1个水果。...请用Wait()、Signal()原语实现爸爸、儿子、女儿三个并发进程的同步。Semaphore mutex=1,mutex1=0,mutex2=0;main(){cobeignfather();son();daugther();coend...

    一:桌上有1空盘,允许存放1个水果。爸爸向盘中放苹果,也可以向盘中放桔子。儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放1个水果供吃者取用。请用Wait()、Signal()原语实现爸爸、儿子、女儿三个并发进程的同步。

    Semaphore mutex=1,mutex1=0,mutex2=0;

    main(){

    cobeign

    father();

    son();

    daugther();

    coend

    }

    father(){

    while(1){

    wait(mutex);

    将水果放在盘子

    if(放的是橘子) signal(mutex1);

    else signal(mutex2);

    }

    }

    son(){

    while(1)

    {

    wait(mutex1);

    吃橘子

    signal(mutex);

    }

    }

    daugther(){

    while(1)

    {

    wait(mutex2);

    吃苹果

    signal(mutex);

    }

    }

    二:在一辆公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开、关门,当售票员关好车门后,司机才能继续开车行驶。试用P、V操作实现司机与售票员之间的同步。

    semaphore door1=door2=1;

    semaphore S1=S2=0;

    main(){

    cobegin

    driver();

    busserver1();

    busserver2();

    coend

    }

    driver(){

    P(door1);

    P(door2);

    启动车辆

    正常行车

    到站停车

    V(S1);

    V(S2);

    }

    busserver1()

    {

    P(S1);

    开前门

    关前门

    V(Door1);

    售票

    }

    busserver2()

    {

    P(S2);

    开后门

    关后门

    V(Door2);

    售票

    }

    三:某银行提供1个服务窗口和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用,当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下:

    semaphore emptyseats=10

    semaphore fullseats=0

    semaphore mutex=1

    cobegin

    {

    process 顾客i

    {

    wait(emptyseats); //获取一个座位

    wait(mutex); //占用取号机取号

    从取号机取号

    wait(mutex);

    signal(fullseats); //座位上增加一个顾客

    等待叫号,获得服务

    signal(emptyseats);

    }

    }

    process 营业员

    {

    while(TRUE)

    {

    wait(fullseats);

    叫号

    为顾客服务;

    }

    }

    }coend

    展开全文
  • 题目描述与思路如下: /** * 问题描述: * 读卡机上读卡片。这一项工作由三个进程... * 进程copy的功能是把buffer1的信息复制到buffer2; * 进程put的功能是取出buffer2的信息并从行式打印机上打印输出。 ...
  • PV原语操作详解

    2019-08-16 14:53:08
    PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前...
  • 计算机操作系统PV原语分析及计算操作系统课程之PV原语PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其...
  • }} 针对操作系统中的信号量的通信机制和PV操作,以及PV操作运用的实例都进行了自己的一些分析,如果里面有说得不对的地方,欢迎大家讨论,一起学习,共同进步,用技术来利于我们的生活和学习。。Go Go Go , hand by ...
  • 操作系统PV原语大题

    2021-06-26 08:33:56
    这里面的begin end代表啥,代表括号?为什么不用括号改用这个了?
  • 操作系统PV原语练习(1)

    千次阅读 2018-11-09 16:00:59
    // 执行cross操作 try { Container.numOfPasserOnBridge.acquire(); cross(); } catch (InterruptedException e) { e.printStackTrace(); } finally { Container.numOfPasserOnBridge.release(); } // ...
  • 在资料有吸烟者问题,哲学家问题,的各种PV原语题目及其解答。与考研直接相关。还有死锁问题
  • PV操作来实现他们之间的协调。S1:是否允许司机启动汽车的变量S2:是否允许售票员开门的变量driver()//司机进程{while (1)//不停地循环{P(S1);//请求启动汽车启动汽车;正常行车;到站停车;V(S2); //释放开门变量...
  • 操作系统中PV原语对进程同步和互斥进行管理,现在假如有三个进程A,B,C,而他们所需的资源系统只有一个,现在A进程运行,他会使用P原语使资源数减一成为0,这时B进程也在申请所以他会被阻塞,这时的资源数为-1,...
  • 上面提到的操作系统提供的一对原语,是指:wait(S)原语和signal(S)原语。这一对原语常被分别称之为 P、V 操作,wait(S)和signal(S)两个操作分别写为 P(s)、V(S) 。 3.1 整型信号量 用一个整型变量作为信号量,用来...
  • 操作系统课程的资料 PV 操作的经典题目
  • 让我们更加容易的了解书本上的一些知识点,希望大家来看看
  • 操作系统PV原语的基本原理和执行特点
  • linux 进程PV原语操作

    2021-05-10 05:01:00
    PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前...
  • pv原语的定义及解释理解

    万次阅读 2016-06-05 17:40:00
     P操作和V操作是不可中断的程序段,称为原语.PV原语及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的.信号量sem是一整数,sem大于等于零时代表可供并发进程使用的资源实体数,但sem小于零时则表示正在等待使用临界区...
  • PV原语详解

    千次阅读 多人点赞 2018-10-29 21:41:35
    PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前...
  • PV原语操作例题

    千次阅读 2013-10-29 23:30:45
    PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。 信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录...
  • 很好的一个操作系统课程设计,答优的!模拟实现pv操作,希望对大家有帮助
  • 信号量S的物理含义S>0:表示有S个资源可用;...信号量是由操作系统来维护的,用户进程只能通过初始化和两个标准原语(P、V原语)来访问,它们在执行时是不可中断的。初始化可指定一个非负整数,即空闲资源总数。...
  • 操作系统】经典PV操作题目

    千次阅读 2021-05-01 22:06:03
    5个经典PV操作题(附答案) 三个进程之间的同步 pv操作的经典习题 生产者和消费者 生产者消费者问题 当只有一个生产者和一个消费者的时候,且只有一个缓冲区 要考虑生产者和消费者两个进程的互斥,还有生产者和消费者...
  • PV操作主要就是P操作、V操作和信号量。其中信号量起到了至关重要的作用。 信号量 信号量是最早出现的用来解决进程同步与互斥问题的机制。 信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,928
精华内容 1,571
关键字:

操作系统pv原语

友情链接: GSM_Network.rar