亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? switch.s

?? LINUX 下NACHOS 系統的頁面調度算法的實現
?? S
字號:
/* switch.s  *   	Machine dependent context switch routines.  DO NOT MODIFY THESE!  * *	Context switching is inherently machine dependent, since *	the registers to be saved, how to set up an initial *	call frame, etc, are all specific to a processor architecture. * * 	This file currently supports the following architectures: *	    DEC MIPS *	    SUN SPARC *	    HP PA-RISC *	    Intel 386 * * We define two routines for each architecture: * * ThreadRoot(InitialPC, InitialArg, WhenDonePC, StartupPC) *	InitialPC  - The program counter of the procedure to run *			in this thread. *      InitialArg - The single argument to the thread. *	WhenDonePC - The routine to call when the thread returns. *	StartupPC  - Routine to call when the thread is started. * *	ThreadRoot is called from the SWITCH() routine to start *	a thread for the first time.  * * SWITCH(oldThread, newThread) * 	oldThread  - The current thread that was running, where the *		CPU register state is to be saved. * 	newThread  - The new thread to be run, where the CPU register *		state is to be loaded from. *//* Copyright (c) 1992-1993 The Regents of the University of California. All rights reserved.  See copyright.h for copyright notice and limitation  of liability and disclaimer of warranty provisions. */#include "copyright.h"#include "switch.h"#ifdef HOST_MIPS/* Symbolic register names */#define z       $0      /* zero register */#define a0      $4      /* argument registers */#define a1      $5#define s0      $16     /* callee saved */#define s1      $17#define s2      $18#define s3      $19#define s4      $20#define s5      $21#define s6      $22#define s7      $23#define sp      $29     /* stack pointer */#define fp      $30     /* frame pointer */#define ra      $31     /* return address */        .text           .align  2	.globl ThreadRoot	.ent	ThreadRoot,0ThreadRoot:	or	fp,z,z		# Clearing the frame pointer here				# makes gdb backtraces of thread stacks 				# end here (I hope!)	jal	StartupPC	# call startup procedure	move	a0, InitialArg	jal	InitialPC	# call main procedure	jal 	WhenDonePC	# when we're done, call clean up procedure	# NEVER REACHED	.end ThreadRoot	# a0 -- pointer to old Thread	# a1 -- pointer to new Thread	.globl SWITCH	.ent	SWITCH,0SWITCH:	sw	sp, SP(a0)		# save new stack pointer	sw	s0, S0(a0)		# save all the callee-save registers	sw	s1, S1(a0)	sw	s2, S2(a0)	sw	s3, S3(a0)	sw	s4, S4(a0)	sw	s5, S5(a0)	sw	s6, S6(a0)	sw	s7, S7(a0)	sw	fp, FP(a0)		# save frame pointer	sw	ra, PC(a0)		# save return address		lw	sp, SP(a1)		# load the new stack pointer	lw	s0, S0(a1)		# load the callee-save registers	lw	s1, S1(a1)	lw	s2, S2(a1)	lw	s3, S3(a1)	lw	s4, S4(a1)	lw	s5, S5(a1)	lw	s6, S6(a1)	lw	s7, S7(a1)	lw	fp, FP(a1)	lw	ra, PC(a1)		# load the return address		j	ra	.end SWITCH#endif HOST_MIPS#ifdef HOST_SPARC/* NOTE!  These files appear not to exist on Solaris -- *  you need to find where (the SPARC-specific) MINFRAME, ST_FLUSH_WINDOWS, ... *  are defined.  (I don't have a Solaris machine, so I have no way to tell.) */#ifdef HOST_SunOS5#include <sys/trap.h>#include <sys/asm_linkage.h>#else#include <sun4/trap.h>#include <sun4/asm_linkage.h>#endif /* HST_SunOS5 */.seg    "text"/* SPECIAL to the SPARC: *	The first two instruction of ThreadRoot are skipped because *	the address of ThreadRoot is made the return address of SWITCH() *	by the routine Thread::StackAllocate.  SWITCH() jumps here on the *	"ret" instruction which is really at "jmp %o7+8".  The 8 skips the *	two nops at the beginning of the routine. */#ifdef HOST_SunOS5.globl	ThreadRootThreadRoot:	#else.globl	_ThreadRoot_ThreadRoot:#endif	nop  ; nop         /* These 2 nops are skipped because we are called			    * with a jmp+8 instruction. */	clr	%fp        /* Clearing the frame pointer makes gdb backtraces 	                    * of thread stacks end here. */			   /* Currently the arguments are in out registers we			    * save them into local registers so they won't be 			    * trashed during the calls we make. */	mov	InitialPC, %l0  	mov	InitialArg, %l1	mov	WhenDonePC, %l2			   /* Execute the code:			   *	call StartupPC();			   *	call InitialPC(InitialArg);			   *	call WhenDonePC();			   */	call	StartupPC,0	nop	call	%l0, 1		mov	%l1, %o0   /* Using delay slot to setup argument to InitialPC */	call	%l2, 0	nop			   /* WhenDonePC call should never return.  If it does			    * we execute a trap into the debugger.  */	ta	ST_BREAKPOINT#ifdef HOST_SunOS5.globl	SWITCHSWITCH:	#else.globl	_SWITCH_SWITCH:#endif	save	%sp, -SA(MINFRAME), %sp	st	%fp, [%i0]	st	%i0, [%i0+I0]	st	%i1, [%i0+I1]	st	%i2, [%i0+I2]	st	%i3, [%i0+I3]	st	%i4, [%i0+I4]	st	%i5, [%i0+I5]	st	%i7, [%i0+I7]	ta	ST_FLUSH_WINDOWS	nop	mov	%i1, %l0	ld	[%l0+I0], %i0	ld	[%l0+I1], %i1	ld	[%l0+I2], %i2	ld	[%l0+I3], %i3	ld	[%l0+I4], %i4	ld	[%l0+I5], %i5	ld	[%l0+I7], %i7	ld	[%l0], %i6	ret	restore#endif HOST_SPARC#ifdef HOST_SNAKE    ;rp = r2,   sp = r30    ;arg0 = r26,  arg1 = r25,  arg2 = r24,  arg3 = r23	.SPACE  $TEXT$	.SUBSPA $CODE$ThreadRoot	.PROC	.CALLINFO CALLER,FRAME=0	.ENTRY	.CALL	ble  0(%r6)		;call StartupPC	or   %r31, 0, %rp	;put return address in proper register	or   %r4, 0, %arg0	;load InitialArg	.CALL	;in=26	ble  0(%r3)		;call InitialPC	or   %r31, 0, %rp	;put return address in proper register	.CALL	ble  0(%r5)		;call WhenDonePC	.EXIT	or   %r31, 0, %rp	;shouldn't really matter - doesn't return	.PROCENDSWITCH	.PROC	.CALLINFO CALLER,FRAME=0	.ENTRY    ; save process state of oldThread	stw  %sp, SP(%arg0)	;save stack pointer	stw  %r3, S0(%arg0)	;save callee-save registers	stw  %r4, S1(%arg0)	stw  %r5, S2(%arg0)	stw  %r6, S3(%arg0)	stw  %r7, S4(%arg0)	stw  %r8, S5(%arg0)	stw  %r9, S6(%arg0)	stw  %r10, S7(%arg0)	stw  %r11, S8(%arg0)	stw  %r12, S9(%arg0)	stw  %r13, S10(%arg0)	stw  %r14, S11(%arg0)	stw  %r15, S12(%arg0)	stw  %r16, S13(%arg0)	stw  %r17, S14(%arg0)	stw  %r18, S15(%arg0)	stw  %rp, PC(%arg0)	;save program counter    ; restore process state of nextThread	ldw  SP(%arg1), %sp	;restore stack pointer	ldw  S0(%arg1), %r3	;restore callee-save registers	ldw  S1(%arg1), %r4	ldw  S2(%arg1), %r5	ldw  S3(%arg1), %r6	ldw  S4(%arg1), %r7	ldw  S5(%arg1), %r8	ldw  S6(%arg1), %r9	ldw  S7(%arg1), %r10	ldw  S8(%arg1), %r11	ldw  S9(%arg1), %r12	ldw  S10(%arg1), %r13	ldw  S11(%arg1), %r14	ldw  S12(%arg1), %r15	ldw  S13(%arg1), %r16	ldw  S14(%arg1), %r17	ldw  PC(%arg1), %rp	;save program counter	bv   0(%rp)	.EXIT	ldw  S15(%arg1), %r18	.PROCEND	.EXPORT SWITCH,ENTRY,PRIV_LEV=3,RTNVAL=GR	.EXPORT ThreadRoot,ENTRY,PRIV_LEV=3,RTNVAL=GR#endif#ifdef HOST_i386        .text        .align  2//change by blueworm 2003/3/16        .globl  ThreadRoot/* void ThreadRoot( void )**** expects the following registers to be initialized:**      eax     points to startup function (interrupt enable)**      edx     contains inital argument to thread function**      esi     points to thread function**      edi     point to Thread::Finish()*///change by blueworm 2003/3/16ThreadRoot:        pushl   %ebp        movl    %esp,%ebp        pushl   InitialArg        call    StartupPC        call    InitialPC        call    WhenDonePC        # NOT REACHED        movl    %ebp,%esp        popl    %ebp        ret/* void SWITCH( thread *t1, thread *t2 )**** on entry, stack looks like this:**      8(esp)  ->              thread *t2**      4(esp)  ->              thread *t1**       (esp)  ->              return address**** we push the current eax on the stack so that we can use it as** a pointer to t1, this decrements esp by 4, so when we use it** to reference stuff on the stack, we add 4 to the offset.*/        .comm   _eax_save,4//change by blueworm 2003/3/16        .globl  SWITCHSWITCH:        movl    %eax,_eax_save          # save the value of eax        movl    4(%esp),%eax            # move pointer to t1 into eax        movl    %ebx,_EBX(%eax)         # save registers        movl    %ecx,_ECX(%eax)        movl    %edx,_EDX(%eax)        movl    %esi,_ESI(%eax)        movl    %edi,_EDI(%eax)        movl    %ebp,_EBP(%eax)        movl    %esp,_ESP(%eax)         # save stack pointer        movl    _eax_save,%ebx          # get the saved value of eax        movl    %ebx,_EAX(%eax)         # store it        movl    0(%esp),%ebx            # get return address from stack into ebx        movl    %ebx,_PC(%eax)          # save it into the pc storage        movl    8(%esp),%eax            # move pointer to t2 into eax        movl    _EAX(%eax),%ebx         # get new value for eax into ebx        movl    %ebx,_eax_save          # save it        movl    _EBX(%eax),%ebx         # retore old registers        movl    _ECX(%eax),%ecx        movl    _EDX(%eax),%edx        movl    _ESI(%eax),%esi        movl    _EDI(%eax),%edi        movl    _EBP(%eax),%ebp        movl    _ESP(%eax),%esp         # restore stack pointer        movl    _PC(%eax),%eax          # restore return address into eax        movl    %eax,4(%esp)            # copy over the ret address on the stack        movl    _eax_save,%eax        ret#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合色天天久久综合图片| 91影院在线观看| 亚洲欧美国产三级| 久久久精品国产免大香伊| 制服丝袜日韩国产| 精品污污网站免费看| 97精品久久久久中文字幕 | 国产精品1区2区3区在线观看| 一区二区三区在线免费播放| 中文字幕亚洲成人| 国产精品视频一二| 国产精品国产三级国产专播品爱网| 精品美女一区二区三区| 精品剧情在线观看| 欧美精品一区二区三区高清aⅴ| 777午夜精品免费视频| 制服视频三区第一页精品| 欧美久久久久久蜜桃| 91精品国产日韩91久久久久久| 欧美日韩亚州综合| 日韩精品一区二区三区蜜臀| 精品久久久久久久久久久久久久久久久| 欧美日韩亚洲综合| 日韩欧美自拍偷拍| 欧美激情综合五月色丁香| 国产精品美女久久久久久久久| 最近日韩中文字幕| 午夜一区二区三区在线观看| 日日夜夜一区二区| 精品综合免费视频观看| 国产999精品久久久久久绿帽| 成人美女在线观看| 在线观看亚洲专区| 欧美成人猛片aaaaaaa| 亚洲国产精品ⅴa在线观看| 日韩精品中文字幕在线不卡尤物| 久久亚洲一区二区三区四区| 国产欧美在线观看一区| 亚洲精品国产第一综合99久久| 亚州成人在线电影| 国产98色在线|日韩| 欧美亚洲图片小说| 久久精品人人做| 亚洲一级在线观看| 国产成人一级电影| 欧美日韩精品一区二区三区四区| 欧美va亚洲va在线观看蝴蝶网| 国产精品另类一区| 热久久国产精品| 99国产精品久久久| 久久这里只有精品视频网| 亚洲精品成人悠悠色影视| 久久69国产一区二区蜜臀| 91视频免费播放| 久久久久久久综合色一本| 亚洲一区在线观看免费观看电影高清 | 久久久一区二区三区| 亚洲青青青在线视频| 老色鬼精品视频在线观看播放| 99热在这里有精品免费| 精品国产三级电影在线观看| 亚洲黄色片在线观看| 国产成人8x视频一区二区 | 午夜精品久久久久久久99樱桃| 国产精品一区二区久激情瑜伽 | 一本一本大道香蕉久在线精品| 日韩精品一区二区三区三区免费| 一区二区欧美在线观看| 国产xxx精品视频大全| 欧美一区二区福利视频| 亚洲在线观看免费视频| 91丨porny丨蝌蚪视频| 国产亚洲综合性久久久影院| 免费观看在线色综合| 欧美日韩国产系列| 亚洲一区二区三区四区五区黄| 丁香另类激情小说| 国产视频在线观看一区二区三区| 日本成人中文字幕| 91麻豆精品国产91| 日日摸夜夜添夜夜添国产精品| 91久久精品一区二区三| 国产精品国产三级国产有无不卡 | 91精品国产综合久久精品图片| 亚洲精品中文字幕在线观看| 成人一级片在线观看| 日本一区二区综合亚洲| 国产在线一区二区| 国产亚洲一二三区| 国产盗摄精品一区二区三区在线 | 日韩视频123| 毛片av一区二区三区| 日韩一区二区免费电影| 国产资源在线一区| 国产欧美综合色| 91在线国产福利| 亚洲一线二线三线视频| 欧美性感一区二区三区| 日本美女一区二区三区视频| 日韩精品一区二区三区在线 | 蜜臀va亚洲va欧美va天堂| 日韩三级在线观看| 精品一二线国产| 国产欧美精品一区二区色综合| av亚洲精华国产精华| 亚洲黄色免费网站| 日韩一级成人av| 国产成人综合在线| 一区二区三区在线观看欧美| 在线精品视频小说1| 日本一区中文字幕| 国产欧美精品区一区二区三区| 成人激情免费网站| 亚洲综合免费观看高清在线观看| 欧美视频一区二区三区| 久久精品国产**网站演员| 国产精品久久久久久久久久免费看 | 亚洲品质自拍视频网站| 欧美日本韩国一区| 国产黑丝在线一区二区三区| 亚洲四区在线观看| 日韩一区二区免费在线观看| 成人影视亚洲图片在线| 婷婷一区二区三区| 中日韩av电影| 日韩一区二区精品| 成人午夜伦理影院| 一区二区日韩电影| 国产精品免费视频网站| 欧美久久久久久久久久| 国产电影一区在线| 日韩av一区二区三区四区| 中文字幕免费一区| 日韩精品一区国产麻豆| 色综合久久88色综合天天免费| 美女视频网站久久| 一区二区三区中文字幕精品精品 | 欧美精品在线一区二区| 国产福利91精品| 久久精品99久久久| 午夜影视日本亚洲欧洲精品| 国产精品久久久久久久浪潮网站| 欧美精品在线观看播放| 99视频精品全部免费在线| 国产一区二区三区四区五区美女 | 亚洲午夜一区二区三区| 中文字幕欧美三区| 26uuuu精品一区二区| 欧美肥妇free| 欧美日本国产一区| 欧美在线观看你懂的| 99re这里都是精品| 成人动漫一区二区在线| 国产美女久久久久| 国产在线国偷精品免费看| 奇米在线7777在线精品| 午夜电影网一区| 偷拍一区二区三区| 亚洲国产一区视频| 亚洲国产cao| 亚洲18色成人| 日韩av电影免费观看高清完整版 | **性色生活片久久毛片| 国产拍揄自揄精品视频麻豆| 久久久不卡网国产精品二区| 精品免费日韩av| 日韩欧美国产高清| 久久无码av三级| 国产亚洲精品久| 国产清纯在线一区二区www| 久久久高清一区二区三区| 久久综合久久99| 国产亚洲精品超碰| 国产精品久久久久影院亚瑟 | 国产福利91精品一区二区三区| 国内欧美视频一区二区| 国产高清精品网站| zzijzzij亚洲日本少妇熟睡| av电影在线观看一区| 日本久久一区二区| 欧美日韩日本视频| 日韩欧美中文字幕一区| 久久久久国产精品厨房| 国产精品久久久久久久第一福利| 亚洲色图20p| 亚洲成人激情av| 国产在线精品免费av| 成人91在线观看| 欧美日韩国产美| 精品国产乱码久久久久久老虎| 国产欧美一区二区精品婷婷| 国产精品福利一区二区| 亚洲成人在线观看视频| 久久99精品国产麻豆婷婷洗澡| 成人自拍视频在线| 91精品国产欧美一区二区18 | 黄色日韩三级电影| 99久久久久久99| 日韩一区二区三| 亚洲靠逼com|