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

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

?? main.c

?? 一個簡單的操作系統minix的核心代碼
?? C
字號:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
				src/mm/main.c	 	 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

16600	/* This file contains the main program of the memory manager and some related
16601	 * procedures.  When MINIX starts up, the kernel runs for a little while,
16602	 * initializing itself and its tasks, and then it runs MM and FS.  Both MM
16603	 * and FS initialize themselves as far as they can.  FS then makes a call to
16604	 * MM, because MM has to wait for FS to acquire a RAM disk.  MM asks the
16605	 * kernel for all free memory and starts serving requests.
16606	 *
16607	 * The entry points into this file are:
16608	 *   main:      starts MM running
16609	 *   reply:     reply to a process making an MM system call
16610	 */
16611	
16612	#include "mm.h"
16613	#include <minix/callnr.h>
16614	#include <minix/com.h>
16615	#include <signal.h>
16616	#include <fcntl.h>
16617	#include <sys/ioctl.h>
16618	#include "mproc.h"
16619	#include "param.h"
16620	
16621	FORWARD _PROTOTYPE( void get_work, (void)                               );
16622	FORWARD _PROTOTYPE( void mm_init, (void)                                );
16623	
16624	/*===========================================================================*
16625	 *                              main                                         *
16626	 *===========================================================================*/
16627	PUBLIC void main()
16628	{
16629	/* Main routine of the memory manager. */
16630	
16631	  int error;
16632	
16633	  mm_init();                    /* initialize memory manager tables */
16634	
16635	  /* This is MM's main loop-  get work and do it, forever and forever. */
16636	  while (TRUE) {
16637	        /* Wait for message. */
16638	        get_work();             /* wait for an MM system call */
16639	        mp = &mproc[who];
16640	
16641	        /* Set some flags. */
16642	        error = OK;
16643	        dont_reply = FALSE;
16644	        err_code = -999;
16645	
16646	        /* If the call number is valid, perform the call. */
16647	        if (mm_call < 0 || mm_call >= NCALLS)
16648	                error = EBADCALL;
16649	        else
16650	                error = (*call_vec[mm_call])();
16651	
16652	        /* Send the results back to the user to indicate completion. */
16653	        if (dont_reply) continue;       /* no reply for EXIT and WAIT */
16654	        if (mm_call == EXEC && error == OK) continue;
16655	        reply(who, error, result2, res_ptr);
16656	  }
16657	}
	
	
16660	/*===========================================================================*
16661	 *                              get_work                                     *
16662	 *===========================================================================*/
16663	PRIVATE void get_work()
16664	{
16665	/* Wait for the next message and extract useful information from it. */
16666	
16667	  if (receive(ANY, &mm_in) != OK) panic("MM receive error", NO_NUM);
16668	  who = mm_in.m_source;         /* who sent the message */
16669	  mm_call = mm_in.m_type;       /* system call number */
16670	}
	
	
16673	/*===========================================================================*
16674	 *                              reply                                        *
16675	 *===========================================================================*/
16676	PUBLIC void reply(proc_nr, result, res2, respt)
16677	int proc_nr;                    /* process to reply to */
16678	int result;                     /* result of the call (usually OK or error #)*/
16679	int res2;                       /* secondary result */
16680	char *respt;                    /* result if pointer */
16681	{
16682	/* Send a reply to a user process. */
16683	
16684	  register struct mproc *proc_ptr;
16685	
16686	  proc_ptr = &mproc[proc_nr];
16687	  /* 
16688	   * To make MM robust, check to see if destination is still alive.  This
16689	   * validy check must be skipped if the caller is a task.
16690	   */
16691	  if ((who >=0) && ((proc_ptr->mp_flags&IN_USE) == 0 || 
16692	        (proc_ptr->mp_flags&HANGING))) return;
16693	
16694	  reply_type = result;
16695	  reply_i1 = res2;
16696	  reply_p1 = respt;
16697	  if (send(proc_nr, &mm_out) != OK) panic("MM can't reply", NO_NUM);
16698	}
	
	
16701	/*===========================================================================*
16702	 *                              mm_init                                      *
16703	 *===========================================================================*/
16704	PRIVATE void mm_init()
16705	{
16706	/* Initialize the memory manager. */
16707	
16708	  static char core_sigs[] = {
16709	        SIGQUIT, SIGILL, SIGTRAP, SIGABRT,
16710	        SIGEMT, SIGFPE, SIGUSR1, SIGSEGV,
16711	        SIGUSR2, 0 };
16712	  register int proc_nr;
16713	  register struct mproc *rmp;
16714	  register char *sig_ptr;
16715	  phys_clicks ram_clicks, total_clicks, minix_clicks, free_clicks, dummy;
16716	  message mess;
16717	  struct mem_map kernel_map[NR_SEGS];
16718	  int mem;
16719	
16720	  /* Build the set of signals which cause core dumps. Do it the Posix
16721	   * way, so no knowledge of bit positions is needed.
16722	   */
16723	  sigemptyset(&core_sset);
16724	  for (sig_ptr = core_sigs; *sig_ptr != 0; sig_ptr++)
16725	        sigaddset(&core_sset, *sig_ptr);
16726	
16727	  /* Get the memory map of the kernel to see how much memory it uses,
16728	   * including the gap between address 0 and the start of the kernel.
16729	   */
16730	  sys_getmap(SYSTASK, kernel_map);
16731	  minix_clicks = kernel_map[S].mem_phys + kernel_map[S].mem_len;
16732	
16733	  /* Initialize MM's tables. */
16734	  for (proc_nr = 0; proc_nr <= INIT_PROC_NR; proc_nr++) {
16735	        rmp = &mproc[proc_nr];
16736	        rmp->mp_flags |= IN_USE;
16737	        sys_getmap(proc_nr, rmp->mp_seg);
16738	        if (rmp->mp_seg[T].mem_len != 0) rmp->mp_flags |= SEPARATE;
16739	        minix_clicks += (rmp->mp_seg[S].mem_phys + rmp->mp_seg[S].mem_len)
16740	                                - rmp->mp_seg[T].mem_phys;
16741	  }
16742	  mproc[INIT_PROC_NR].mp_pid = INIT_PID;
16743	  sigemptyset(&mproc[INIT_PROC_NR].mp_ignore);
16744	  sigemptyset(&mproc[INIT_PROC_NR].mp_catch);
16745	  procs_in_use = LOW_USER + 1;
16746	
16747	  /* Wait for FS to send a message telling the RAM disk size then go "on-line".
16748	   */
16749	  if (receive(FS_PROC_NR, &mess) != OK)
16750	        panic("MM can't obtain RAM disk size from FS", NO_NUM);
16751	
16752	  ram_clicks = mess.m1_i1;
16753	
16754	  /* Initialize tables to all physical mem. */
16755	  mem_init(&total_clicks, &free_clicks);
16756	
16757	  /* Print memory information. */
16758	  printf("\nMemory size =%5dK   ", click_to_round_k(total_clicks));
16759	  printf("MINIX =%4dK   ", click_to_round_k(minix_clicks));
16760	  printf("RAM disk =%5dK   ", click_to_round_k(ram_clicks));
16761	  printf("Available =%5dK\n\n", click_to_round_k(free_clicks));
16762	
16763	  /* Tell FS to continue. */
16764	  if (send(FS_PROC_NR, &mess) != OK)
16765	        panic("MM can't sync up with FS", NO_NUM);
16766	
16767	  /* Tell the memory task where my process table is for the sake of ps(1). */
16768	  if ((mem = open("/dev/mem", O_RDWR)) != -1) {
16769	        ioctl(mem, MIOCSPSINFO, (void *) mproc);
16770	        close(mem);
16771	  }
16772	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
热久久国产精品| 欧美日韩国产乱码电影| 久久99精品国产.久久久久| 亚洲gay无套男同| 五月婷婷激情综合网| 午夜激情一区二区| 日韩电影在线看| 午夜精品123| 精品影视av免费| 国产综合色在线视频区| 国产精品一区二区在线观看网站| 国产成a人亚洲精品| 成人av资源网站| 欧美无砖专区一中文字| 欧美精品一二三| 日韩一区二区视频| 国产亚洲精品bt天堂精选| 国产精品久99| 亚洲福利一二三区| 麻豆成人在线观看| 本田岬高潮一区二区三区| 在线观看网站黄不卡| 欧美一区二区久久| 国产精品国产三级国产aⅴ中文 | 91麻豆精品国产无毒不卡在线观看 | 国产日韩欧美电影| 亚洲另类在线制服丝袜| 另类人妖一区二区av| 成人高清视频在线| 欧美日韩在线播放三区| 久久久亚洲精华液精华液精华液| 亚洲男人的天堂av| 久久99国产乱子伦精品免费| 99精品国产一区二区三区不卡| 欧美久久久久久久久中文字幕| 久久综合九色综合欧美98| 一区二区三区国产豹纹内裤在线| 美女网站在线免费欧美精品| 97久久超碰国产精品| 日韩女优电影在线观看| 国产精品久久久久久久久图文区| 免费观看在线综合色| 成人av资源在线观看| 精品奇米国产一区二区三区| 一区二区不卡在线播放 | 国产亚洲短视频| 丝袜亚洲另类欧美| 91香蕉视频在线| 久久精品一区二区三区四区| 首页国产丝袜综合| 色噜噜夜夜夜综合网| 国产欧美一二三区| 久久99精品网久久| 在线播放欧美女士性生活| 亚洲另类在线制服丝袜| 成人激情黄色小说| 国产三级一区二区三区| 国内成人免费视频| 欧美一级黄色录像| 爽好多水快深点欧美视频| 在线亚洲人成电影网站色www| 欧美国产97人人爽人人喊| 精品一区二区三区视频在线观看| 欧美丝袜丝交足nylons图片| 亚洲天堂a在线| 99久久精品免费看| 国产精品蜜臀在线观看| 国产高清精品网站| 久久久精品国产免大香伊| 国产在线精品一区二区三区不卡| 日韩一区二区视频| 久久精品国产成人一区二区三区| 91精品久久久久久蜜臀| 婷婷丁香久久五月婷婷| 欧美日韩一区二区在线观看| 亚洲一区二区三区四区在线观看 | 麻豆91精品91久久久的内涵| 欧美一个色资源| 激情综合网激情| 精品国产青草久久久久福利| 久久精品国产免费| 久久欧美一区二区| 国产盗摄视频一区二区三区| 久久日韩精品一区二区五区| 国产精品一区二区在线看| 国产片一区二区| 91丨porny丨蝌蚪视频| 亚洲欧美色一区| 欧美男男青年gay1069videost| 香蕉av福利精品导航| 欧美一区午夜精品| 国产在线日韩欧美| 日韩伦理电影网| 精品视频一区二区不卡| 久久精品国产99久久6| 久久久www成人免费毛片麻豆| 国产麻豆一精品一av一免费| 国产精品高潮久久久久无| 在线欧美一区二区| 麻豆精品在线视频| 自拍偷拍亚洲激情| 欧美酷刑日本凌虐凌虐| 国产麻豆视频精品| 亚洲一区在线播放| www日韩大片| 91福利在线观看| 韩国成人精品a∨在线观看| 国产女人aaa级久久久级| 色88888久久久久久影院野外| 日韩av在线发布| 亚洲欧美在线视频观看| 欧美一区二区福利视频| 99精品欧美一区二区三区小说 | 91精品国产黑色紧身裤美女| 成人性视频免费网站| 天天综合色天天| 久久色中文字幕| 91麻豆精品国产91久久久资源速度 | 亚洲风情在线资源站| 久久精品这里都是精品| 777午夜精品视频在线播放| 国产成人午夜高潮毛片| 日本成人中文字幕| 一区二区三区电影在线播| 26uuu国产一区二区三区| 欧美色男人天堂| 91影院在线免费观看| 国产盗摄视频一区二区三区| 婷婷久久综合九色综合绿巨人 | 日韩女优电影在线观看| 欧美私模裸体表演在线观看| www.久久久久久久久| 精品在线你懂的| 日韩不卡在线观看日韩不卡视频| 国产精品第四页| 久久久久久久综合| 日韩欧美精品三级| 日韩一区二区三区电影在线观看 | 精品粉嫩超白一线天av| 欧美日韩高清一区二区不卡| 91免费版在线| 丁香激情综合国产| 国产99久久久国产精品潘金网站| 老司机午夜精品| 日本91福利区| 日本欧美一区二区三区乱码| 舔着乳尖日韩一区| 日韩制服丝袜av| 日本人妖一区二区| 麻豆国产欧美日韩综合精品二区| 三级在线观看一区二区| 亚洲成人激情综合网| 亚洲一区二区三区四区的| 一区av在线播放| 日韩精品五月天| 日本中文字幕不卡| 美日韩黄色大片| 国产精品一区二区男女羞羞无遮挡| 国模套图日韩精品一区二区 | 中文字幕视频一区| 中文字幕字幕中文在线中不卡视频| 国产精品欧美一区喷水| 亚洲天天做日日做天天谢日日欢 | 精品一区二区三区在线播放 | 91免费观看视频在线| 99精品视频中文字幕| 日本女人一区二区三区| 石原莉奈在线亚洲二区| 精品综合免费视频观看| 成人网男人的天堂| 色先锋资源久久综合| 91精品久久久久久久99蜜桃| 欧美mv日韩mv亚洲| 中文字幕欧美日本乱码一线二线| 136国产福利精品导航| 亚洲无线码一区二区三区| 美女一区二区久久| 成人一区二区三区视频在线观看| 91婷婷韩国欧美一区二区| 欧美日韩精品免费观看视频| 久久亚洲捆绑美女| 亚洲天堂久久久久久久| 蜜桃av一区二区| 91色婷婷久久久久合中文| 欧美一区二区三区四区视频| 中文字幕av不卡| 日韩1区2区3区| 99久久99久久久精品齐齐 | 日本亚洲三级在线| av中文字幕一区| 欧美一级艳片视频免费观看| 亚洲国产精品v| 日本不卡123| 色8久久精品久久久久久蜜| 欧美精品一区视频| 亚洲精品免费在线观看| 国产裸体歌舞团一区二区| 欧美丝袜丝交足nylons图片| 国产午夜三级一区二区三| 日韩黄色在线观看|