📄 patch
字号:
+ + /* Main loop - get work and do it, forever. */ + while (TRUE) { + + /* Wait for incoming message, sets 'callnr' and 'who'. */+ get_work(&m);+ + switch (callnr) {+ case PROC_EVENT:+ sig_handler();+ continue;+ case SEMA_INIT:+ result = do_init(&m);+ break;+ case SEMA_DOWN:+ result = do_down(&m);+ break;+ case SEMA_UP:+ result = do_up(&m);+ break;+ case SEMA_RELEASE:+ result = do_release(&m); + case GETSYSINFO:+ result = do_getsysinfo(&m);+ break;+ default: + report("DS","warning, got illegal request from:", m.m_source);+ result = EINVAL;+ }+ + /* Finally send reply message, unless disabled. */+ if (result != EDONTREPLY) {+ m.m_type = result; /* build reply message */+ reply(who_e, &m); /* send it away */+ }+ }+ return(OK); /* shouldn't come here */+ }+ + /*===========================================================================*+ * init_server *+ *===========================================================================*/+ PRIVATE void init_server(int argc, char **argv)+ {+ /* Initialize the data store server. */+ int i, s;+ struct sigaction sigact;+ + /* Install signal handler. Ask PM to transform signal into message. */+ sigact.sa_handler = SIG_MESS;+ sigact.sa_mask = ~0; /* block all other signals */+ sigact.sa_flags = 0; /* default behaviour */+ if (sigaction(SIGTERM, &sigact, NULL) < 0) + report("DS","warning, sigaction() failed", errno);+ }+ + /*===========================================================================*+ * sig_handler *+ *===========================================================================*/+ PRIVATE void sig_handler()+ {+ /* Signal handler. */+ sigset_t sigset;+ int sig;+ + /* Try to obtain signal set from PM. */+ if (getsigset(&sigset) != 0) return;+ + /* Check for known signals. */+ if (sigismember(&sigset, SIGTERM)) {+ exit_server();+ }+ }+ + /*===========================================================================*+ * exit_server *+ *===========================================================================*/+ PRIVATE void exit_server()+ {+ /* Shut down the information service. */+ + /* Done. Now exit. */+ exit(0);+ }+ + /*===========================================================================*+ * get_work *+ *===========================================================================*/+ PRIVATE void get_work(m_ptr)+ message *m_ptr; /* message buffer */+ {+ int status = 0;+ status = receive(ANY, m_ptr); /* this blocks until message arrives */+ if (OK != status)+ panic("SS","failed to receive message!", status);+ who_e = m_ptr->m_source; /* message arrived! set sender */+ callnr = m_ptr->m_type; /* set function call number */+ }+ + /*===========================================================================*+ * reply *+ *===========================================================================*/+ PRIVATE void reply(who_e, m_ptr)+ int who_e; /* destination */+ message *m_ptr; /* message buffer */+ {+ int s;+ s = send(who_e, m_ptr); /* send the message */+ if (OK != s)+ panic("SS", "unable to send reply!", s);+ }+ diff -c -Nr src.clean/servers/ss/proto.h src/servers/ss/proto.h*** src.clean/servers/ss/proto.h Thu Jan 1 00:00:00 1970--- src/servers/ss/proto.h Fri Nov 14 20:45:35 2008****************** 0 ****--- 1,12 ----+ /* Function prototypes. */+ + /* main.c */+ _PROTOTYPE(int main, (int argc, char **argv));+ + /* sema.c */+ _PROTOTYPE(int do_init, (message *m_ptr));+ _PROTOTYPE(int do_down, (message *m_ptr));+ _PROTOTYPE(int do_up, (message *m_ptr));+ _PROTOTYPE(int do_release, (message *m_ptr));+ _PROTOTYPE(int do_getsysinfo, (message *m_ptr));+ diff -c -Nr src.clean/servers/ss/store.c src/servers/ss/store.c*** src.clean/servers/ss/store.c Thu Jan 1 00:00:00 1970--- src/servers/ss/store.c Sat Nov 15 15:37:29 2008****************** 0 ****--- 1,42 ----+ /* Implementation of the Data Store. */+ + #include "inc.h"+ + PUBLIC int do_init(m_ptr)+ message *m_ptr; /* request message */+ {+ + printf("ss:init,%d",m_ptr->m_source);+ return(OK);+ }+ + + PUBLIC int do_up(m_ptr)+ message *m_ptr; /* request message */+ {+ return(OK); /* key not found */+ }+ + + PUBLIC int do_down(m_ptr)+ message *m_ptr; /* request message */+ {+ return(OK);+ }+ + PUBLIC int do_release(m_ptr)+ message *m_ptr; /* request message */+ {+ return(OK);+ }+ + + /*===========================================================================*+ * do_getsysinfo *+ *===========================================================================*/+ PUBLIC int do_getsysinfo(m_ptr)+ message *m_ptr;+ {+ return(OK);+ }+ diff -c -Nr src.clean/servers/ss/store.h src/servers/ss/store.h*** src.clean/servers/ss/store.h Thu Jan 1 00:00:00 1970--- src/servers/ss/store.h Fri Nov 14 19:57:49 2008****************** 0 ****--- 1,7 ----+ /* Type definitions for the Data Store Server. */+ struct semaphore {+ int sema_nr; /* flags for this store */+ int start_nr; /* key to lookup information */+ };+ + diff -c -Nr src.clean/tools/Makefile src/tools/Makefile*** src.clean/tools/Makefile Thu Nov 13 17:54:56 2008--- src/tools/Makefile Fri Nov 14 20:19:43 2008****************** 11,16 ****--- 11,17 ---- ../servers/fs/fs \ ../servers/rs/rs \ ../servers/ds/ds \+ ../servers/ss/ss \ ../drivers/tty/tty \ ../drivers/memory/memory \ ../drivers/log/log \diff -c -Nr src.clean/tools/Makefile~ src/tools/Makefile~*** src.clean/tools/Makefile~ Thu Jan 1 00:00:00 1970--- src/tools/Makefile~ Sun Apr 9 23:16:13 2006****************** 0 ****--- 1,100 ----+ # Makefile for the kernel image.+ + u=/usr+ CC= exec cc+ CFLAGS= -O -D_MINIX -D_POSIX_SOURCE+ MDEC= /usr/mdec+ + # Specify the programs that are part of the system image.+ PROGRAMS= ../kernel/kernel \+ ../servers/pm/pm \+ ../servers/fs/fs \+ ../servers/rs/rs \+ ../servers/ds/ds \+ ../drivers/tty/tty \+ ../drivers/memory/memory \+ ../drivers/log/log \+ ../servers/init/init+ + usage: + @echo " " >&2+ @echo "Master Makefile to create new MINIX configuration." >& 2+ @echo "Root privileges are required." >&2+ @echo " " >&2+ @echo "Usage:" >&2+ @echo " make includes # Install include files" >&2+ @echo " make depend # Generate dependency files" >&2+ @echo " make libraries # Make system libraries" >&2+ @echo " make services # Compile and install all services" >&2+ @echo " make fresh # Make clean, libraries, and services" >&2+ @echo " make image # Make needed services and create boot image" >&2+ @echo " make install # Make image, and install to hard disk" >&2+ @echo " make hdboot # Make image, and install to hard disk" >&2+ @echo " make fdboot # Make image, and install to floppy disk" >&2+ @echo " make bootable # Make hard disk bootable" >&2+ @echo " make clean # Remove all compiler results, except libs" >&2+ @echo " " >&2+ @echo "To create a fresh MINIX configuration, try:" >&2+ @echo " make clean install # new boot image" >&2+ @echo " make fresh install # new everything" >&2+ @echo " " >&2+ + # create a fresh configuration or system image+ fresh: + cd ../lib && $(MAKE) clean+ $(MAKE) clean + $(MAKE) libraries services+ + all: services image+ + image: includes+ cd ../kernel && $(MAKE) + cd ../servers && $(MAKE) image+ cd ../drivers && $(MAKE) image+ installboot -image $@ $(PROGRAMS)+ + image_small: includes+ cd ../kernel && $(MAKE) + cd ../servers && $(MAKE) EXTRA_OPTS=-D_MINIX_SMALL=1 image+ cd ../drivers && $(MAKE) EXTRA_OPTS=$(EXTRA_OPTS) image+ installboot -image $@ $(PROGRAMS)+ + # rebuild the program or system libraries+ includes:+ cd ../include && $(MAKE) install+ + depend: includes+ cd ../ && $(MAKE) depend+ + services: includes + cd ../kernel && $(MAKE) + cd ../servers && $(MAKE) install+ cd ../drivers && $(MAKE) install+ + libraries: includes+ cd ../lib && $(MAKE) clean+ cd ../lib && $(MAKE) all+ cd ../lib && $(MAKE) install+ + + # make bootable and place system images+ bootable:+ exec su root mkboot bootable+ + hdboot: image+ exec sh mkboot $@+ @sync+ + fdboot: image+ exec su root mkboot $@+ @sync+ + install: includes services hdboot+ + # clean up compile results+ clean:+ cd ../kernel && $(MAKE) $@+ cd ../servers && $(MAKE) $@+ cd ../drivers && $(MAKE) $@+ rm -rf *.bak image image_small *.iso *.iso.gz cdfdimage rootimage src+ diff -c -Nr src.clean/tools/revision src/tools/revision*** src.clean/tools/revision Thu Nov 13 17:54:56 2008--- src/tools/revision Sat Nov 15 15:38:37 2008****************** 1 ****! 0--- 1 ----! 20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -