2020-07-25 23:50:03 +00:00
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv = "Content-Type" content = "text/xhtml;charset=UTF-8" / >
< meta http-equiv = "X-UA-Compatible" content = "IE=9" / >
< meta name = "generator" content = "Doxygen 1.8.18" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< title > MyOS Kernel: kernel/tasking.c File Reference< / title >
< link href = "tabs.css" rel = "stylesheet" type = "text/css" / >
< script type = "text/javascript" src = "jquery.js" > < / script >
< script type = "text/javascript" src = "dynsections.js" > < / script >
< link href = "navtree.css" rel = "stylesheet" type = "text/css" / >
< script type = "text/javascript" src = "resize.js" > < / script >
< script type = "text/javascript" src = "navtreedata.js" > < / script >
< script type = "text/javascript" src = "navtree.js" > < / script >
< link href = "search/search.css" rel = "stylesheet" type = "text/css" / >
< script type = "text/javascript" src = "search/searchdata.js" > < / script >
< script type = "text/javascript" src = "search/search.js" > < / script >
< link href = "doxygen.css" rel = "stylesheet" type = "text/css" / >
< / head >
< body >
< div id = "top" > <!-- do not remove this div, it is closed by doxygen! -->
< div id = "titlearea" >
< table cellspacing = "0" cellpadding = "0" >
< tbody >
< tr style = "height: 56px;" >
< td id = "projectalign" style = "padding-left: 0.5em;" >
< div id = "projectname" > MyOS Kernel
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
< / script >
< script type = "text/javascript" src = "menudata.js" > < / script >
< script type = "text/javascript" src = "menu.js" > < / script >
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */< / script >
< div id = "main-nav" > < / div >
< / div > <!-- top -->
< div id = "side-nav" class = "ui-resizable side-nav-resizable" >
< div id = "nav-tree" >
< div id = "nav-tree-contents" >
< div id = "nav-sync" class = "sync" > < / div >
< / div >
< / div >
< div id = "splitbar" style = "-moz-user-select:none;"
class="ui-resizable-handle">
< / div >
< / div >
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('tasking_8c.html',''); initResizable(); });
/* @license-end */
< / script >
< div id = "doc-content" >
<!-- window showing the filter options -->
< div id = "MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
< / div >
<!-- iframe showing the search results (closed by default) -->
< div id = "MSearchResultsWindow" >
< iframe src = "javascript:void(0)" frameborder = "0"
name="MSearchResults" id="MSearchResults">
< / iframe >
< / div >
< div class = "header" >
< div class = "summary" >
< a href = "#define-members" > Macros< / a > |
< a href = "#func-members" > Functions< / a > |
< a href = "#var-members" > Variables< / a > < / div >
< div class = "headertitle" >
< div class = "title" > tasking.c File Reference< / div > < / div >
< / div > <!-- header -->
< div class = "contents" >
< div class = "textblock" > < code > #include " < a class = "el" href = "halt_8h_source.html" > cpu/halt.h< / a > " < / code > < br / >
< code > #include " < a class = "el" href = "paging_8h_source.html" > cpu/paging.h< / a > " < / code > < br / >
< code > #include " < a class = "el" href = "serial_8h_source.html" > cpu/serial.h< / a > " < / code > < br / >
< code > #include " < a class = "el" href = "tasking__helpers_8h_source.html" > cpu/tasking_helpers.h< / a > " < / code > < br / >
< code > #include " < a class = "el" href = "kmalloc_8h_source.html" > kmalloc.h< / a > " < / code > < br / >
< code > #include " < a class = "el" href = "tasking_8h_source.html" > tasking.h< / a > " < / code > < br / >
< code > #include < sys/types.h> < / code > < br / >
< / div > < table class = "memberdecls" >
< tr class = "heading" > < td colspan = "2" > < h2 class = "groupheader" > < a name = "define-members" > < / a >
Macros< / h2 > < / td > < / tr >
< tr class = "memitem:a0e92bfcd9e51ca39bbebc3dfb9c16014" > < td class = "memItemLeft" align = "right" valign = "top" > < a id = "a0e92bfcd9e51ca39bbebc3dfb9c16014" > < / a >
#define  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a0e92bfcd9e51ca39bbebc3dfb9c16014" > MAX_PROCS< / a >       32768< / td > < / tr >
< tr class = "memdesc:a0e92bfcd9e51ca39bbebc3dfb9c16014" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Maximum number of processes that can be running at a time. < br / > < / td > < / tr >
< tr class = "separator:a0e92bfcd9e51ca39bbebc3dfb9c16014" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a707e5829cfbdaede08d2fdcd44c2d987" > < td class = "memItemLeft" align = "right" valign = "top" > < a id = "a707e5829cfbdaede08d2fdcd44c2d987" > < / a >
2020-07-28 15:34:51 +00:00
#define  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a707e5829cfbdaede08d2fdcd44c2d987" > HAS_UNBLOCKED_THREADS< / a > (proc)      (proc-> num_threads!=proc-> num_threads_blocked)< / td > < / tr >
2020-07-25 23:50:03 +00:00
< tr class = "memdesc:a707e5829cfbdaede08d2fdcd44c2d987" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Macro to check whethe a process has unblocked threads. < br / > < / td > < / tr >
< tr class = "separator:a707e5829cfbdaede08d2fdcd44c2d987" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:ac4810428cfd4d217c8c07e8d7142509f" > < td class = "memItemLeft" align = "right" valign = "top" > < a id = "ac4810428cfd4d217c8c07e8d7142509f" > < / a >
2020-07-28 15:34:51 +00:00
#define  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#ac4810428cfd4d217c8c07e8d7142509f" > NUM_UNBLOCKED_THREADS< / a > (proc)      (proc-> num_threads-proc-> num_threads_blocked)< / td > < / tr >
2020-07-25 23:50:03 +00:00
< tr class = "memdesc:ac4810428cfd4d217c8c07e8d7142509f" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Macro to get the number of unblocked threads for a process. < br / > < / td > < / tr >
< tr class = "separator:ac4810428cfd4d217c8c07e8d7142509f" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:ad274a1a236e5a5d3a1be62f9d1f6eeec" > < td class = "memItemLeft" align = "right" valign = "top" > < a id = "ad274a1a236e5a5d3a1be62f9d1f6eeec" > < / a >
#define  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#ad274a1a236e5a5d3a1be62f9d1f6eeec" > SAME_PROC< / a > (thread1, thread2)      (thread1-> process-> pid==thread2-> process-> pid)< / td > < / tr >
< tr class = "memdesc:ad274a1a236e5a5d3a1be62f9d1f6eeec" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Macro to check whether two threads have the same PID. < br / > < / td > < / tr >
< tr class = "separator:ad274a1a236e5a5d3a1be62f9d1f6eeec" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:af8b29f74b3134b814dd82f5e36871627" > < td class = "memItemLeft" align = "right" valign = "top" > < a id = "af8b29f74b3134b814dd82f5e36871627" > < / a >
#define  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#af8b29f74b3134b814dd82f5e36871627" > SAME_THREAD< / a > (thread1, thread2)      (thread1-> process-> pid==thread2-> process-> pid& & thread1-> tid==thread2-> tid)< / td > < / tr >
< tr class = "memdesc:af8b29f74b3134b814dd82f5e36871627" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Macro to check whether two threads have the same PID and TID. < br / > < / td > < / tr >
< tr class = "separator:af8b29f74b3134b814dd82f5e36871627" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< / table > < table class = "memberdecls" >
< tr class = "heading" > < td colspan = "2" > < h2 class = "groupheader" > < a name = "func-members" > < / a >
Functions< / h2 > < / td > < / tr >
< tr class = "memitem:a4fe00345b6be4d48d67c8d07112fd3a1" > < td class = "memItemLeft" align = "right" valign = "top" > static char  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a4fe00345b6be4d48d67c8d07112fd3a1" > is_proc_scheduled< / a > (pid_t index)< / td > < / tr >
< tr class = "separator:a4fe00345b6be4d48d67c8d07112fd3a1" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a3c8c11f9a0587bbfe09e2a348301849a" > < td class = "memItemLeft" align = "right" valign = "top" > static void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a3c8c11f9a0587bbfe09e2a348301849a" > mark_proc_scheduled< / a > (pid_t index)< / td > < / tr >
< tr class = "separator:a3c8c11f9a0587bbfe09e2a348301849a" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:ad3a9873876af082690bffdb92292c7d6" > < td class = "memItemLeft" align = "right" valign = "top" > static void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#ad3a9873876af082690bffdb92292c7d6" > unmark_proc_scheduled< / a > (pid_t index)< / td > < / tr >
< tr class = "separator:ad3a9873876af082690bffdb92292c7d6" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a38bc7128c0f55dcb2b4ce0e36cae9c2b" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a38bc7128c0f55dcb2b4ce0e36cae9c2b" > tasking_create_task< / a > (void *eip, void *cr3, char kmode, char param1_exists, void *param1_arg, char param2_exists, void *param2_arg, char isThread)< / td > < / tr >
< tr class = "separator:a38bc7128c0f55dcb2b4ce0e36cae9c2b" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a45f6d4112f15e33ba7a0e356f821d056" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a45f6d4112f15e33ba7a0e356f821d056" > tasking_init< / a > ()< / td > < / tr >
< tr class = "separator:a45f6d4112f15e33ba7a0e356f821d056" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a47f424f3474f4298f1d6b65eeee5d0f6" > < td class = "memItemLeft" align = "right" valign = "top" > char  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a47f424f3474f4298f1d6b65eeee5d0f6" > tasking_is_privleged< / a > ()< / td > < / tr >
< tr class = "separator:a47f424f3474f4298f1d6b65eeee5d0f6" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a9555a59dc2340ce36ae1a84c984b3af0" > < td class = "memItemLeft" align = "right" valign = "top" > pid_t  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a9555a59dc2340ce36ae1a84c984b3af0" > tasking_get_PID< / a > ()< / td > < / tr >
< tr class = "separator:a9555a59dc2340ce36ae1a84c984b3af0" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a347fac6db01ff796e5dc6d1fc44c2eef" > < td class = "memItemLeft" align = "right" valign = "top" > int *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a347fac6db01ff796e5dc6d1fc44c2eef" > tasking_get_errno_address< / a > ()< / td > < / tr >
< tr class = "separator:a347fac6db01ff796e5dc6d1fc44c2eef" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:ab4d000931b7ca87b83905b6172471d0e" > < td class = "memItemLeft" align = "right" valign = "top" > pid_t  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#ab4d000931b7ca87b83905b6172471d0e" > tasking_new_thread< / a > (void *start, pid_t pid, char param_exists, void *param_arg)< / td > < / tr >
< tr class = "separator:ab4d000931b7ca87b83905b6172471d0e" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a92bbbaf5a589e3717ba7f91deaae0071" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a92bbbaf5a589e3717ba7f91deaae0071" > switch_to_thread< / a > (< a class = "el" href = "structThread.html" > Thread< / a > *thread)< / td > < / tr >
< tr class = "separator:a92bbbaf5a589e3717ba7f91deaae0071" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a78aa02f7e342d1a6f76fb2c692086f50" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a78aa02f7e342d1a6f76fb2c692086f50" > tasking_yield< / a > ()< / td > < / tr >
< tr class = "separator:a78aa02f7e342d1a6f76fb2c692086f50" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a021c821360fc28b1a509b585f8d21769" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a021c821360fc28b1a509b585f8d21769" > tasking_block< / a > (< a class = "el" href = "tasking_8h.html#a4b1b32c1fc744438f665f0f1932dd207" > thread_state< / a > newstate)< / td > < / tr >
< tr class = "separator:a021c821360fc28b1a509b585f8d21769" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a8daf634972bbe78df522aade52c180bf" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a8daf634972bbe78df522aade52c180bf" > tasking_unblock< / a > (pid_t pid, pid_t tid)< / td > < / tr >
< tr class = "separator:a8daf634972bbe78df522aade52c180bf" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:acf62dd83316df4b63f4a93587c9b791e" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#acf62dd83316df4b63f4a93587c9b791e" > tasking_exit< / a > (int code)< / td > < / tr >
< tr class = "separator:acf62dd83316df4b63f4a93587c9b791e" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< / table > < table class = "memberdecls" >
< tr class = "heading" > < td colspan = "2" > < h2 class = "groupheader" > < a name = "var-members" > < / a >
Variables< / h2 > < / td > < / tr >
< tr class = "memitem:a54a60f61f4b468b7e6ef164c4b5ba60b" > < td class = "memItemLeft" align = "right" valign = "top" > < a id = "a54a60f61f4b468b7e6ef164c4b5ba60b" > < / a >
pid_t  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a54a60f61f4b468b7e6ef164c4b5ba60b" > next_pid< / a > =0< / td > < / tr >
< tr class = "memdesc:a54a60f61f4b468b7e6ef164c4b5ba60b" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > PID to use for the next created process. < br / > < / td > < / tr >
< tr class = "separator:a54a60f61f4b468b7e6ef164c4b5ba60b" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a440d57f12c449097a95746dd9198df5d" > < td class = "memItemLeft" align = "right" valign = "top" > < a id = "a440d57f12c449097a95746dd9198df5d" > < / a >
size_t  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a440d57f12c449097a95746dd9198df5d" > num_procs< / a > =0< / td > < / tr >
< tr class = "memdesc:a440d57f12c449097a95746dd9198df5d" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Number of non-exited processes. < br / > < / td > < / tr >
< tr class = "separator:a440d57f12c449097a95746dd9198df5d" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a1ecf44f0807ae24e1107f6ebf9dcf50d" > < td class = "memItemLeft" align = "right" valign = "top" > < a id = "a1ecf44f0807ae24e1107f6ebf9dcf50d" > < / a >
< a class = "el" href = "structProcess.html" > Process< / a > *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a1ecf44f0807ae24e1107f6ebf9dcf50d" > processes< / a > [< a class = "el" href = "tasking_8c.html#a0e92bfcd9e51ca39bbebc3dfb9c16014" > MAX_PROCS< / a > ]< / td > < / tr >
< tr class = "memdesc:a1ecf44f0807ae24e1107f6ebf9dcf50d" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Array pf processes by PID. < br / > < / td > < / tr >
< tr class = "separator:a1ecf44f0807ae24e1107f6ebf9dcf50d" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a2f20bcee38d64c49d899e11e09e8ac1c" > < td class = "memItemLeft" align = "right" valign = "top" > < a id = "a2f20bcee38d64c49d899e11e09e8ac1c" > < / a >
char  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a2f20bcee38d64c49d899e11e09e8ac1c" > proc_schedule_bmap< / a > [< a class = "el" href = "tasking_8c.html#a0e92bfcd9e51ca39bbebc3dfb9c16014" > MAX_PROCS< / a > /8]< / td > < / tr >
< tr class = "memdesc:a2f20bcee38d64c49d899e11e09e8ac1c" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Bitmap of what processes are scheduled. < br / > < / td > < / tr >
< tr class = "separator:a2f20bcee38d64c49d899e11e09e8ac1c" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:aac59f73081d1aff0293b54c543b552ca" > < td class = "memItemLeft" align = "right" valign = "top" > < a id = "aac59f73081d1aff0293b54c543b552ca" > < / a >
< a class = "el" href = "structThread.html" > Thread< / a > *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#aac59f73081d1aff0293b54c543b552ca" > current_thread< / a > < / td > < / tr >
< tr class = "memdesc:aac59f73081d1aff0293b54c543b552ca" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Currently running thread. < br / > < / td > < / tr >
< tr class = "separator:aac59f73081d1aff0293b54c543b552ca" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a9350c5c9949c166a8e832a5bd09ab644" > < td class = "memItemLeft" align = "right" valign = "top" > < a id = "a9350c5c9949c166a8e832a5bd09ab644" > < / a >
static < a class = "el" href = "structThread.html" > Thread< / a > *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#a9350c5c9949c166a8e832a5bd09ab644" > ready_to_run_head< / a > =NULL< / td > < / tr >
< tr class = "memdesc:a9350c5c9949c166a8e832a5bd09ab644" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Head of the linked list of ready to run threads. < br / > < / td > < / tr >
< tr class = "separator:a9350c5c9949c166a8e832a5bd09ab644" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:ae219bf3d5df58ccd05cf59c2fefb5f2a" > < td class = "memItemLeft" align = "right" valign = "top" > < a id = "ae219bf3d5df58ccd05cf59c2fefb5f2a" > < / a >
static < a class = "el" href = "structThread.html" > Thread< / a > *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "tasking_8c.html#ae219bf3d5df58ccd05cf59c2fefb5f2a" > ready_to_run_tail< / a > =NULL< / td > < / tr >
< tr class = "memdesc:ae219bf3d5df58ccd05cf59c2fefb5f2a" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Tail of the linked list of ready to run threads. < br / > < / td > < / tr >
< tr class = "separator:ae219bf3d5df58ccd05cf59c2fefb5f2a" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< / table >
< h2 class = "groupheader" > Function Documentation< / h2 >
< a id = "a4fe00345b6be4d48d67c8d07112fd3a1" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a4fe00345b6be4d48d67c8d07112fd3a1" > ◆ < / a > < / span > is_proc_scheduled()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > static char is_proc_scheduled < / td >
< td > (< / td >
< td class = "paramtype" > pid_t  < / td >
< td class = "paramname" > < em > index< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / td >
< td class = "mlabels-right" >
< span class = "mlabels" > < span class = "mlabel" > static< / span > < / span > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Check whether a process is scheduled < / p > < dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > index< / td > < td > The PID to check < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > whether the process is scheduled < / dd > < / dl >
< / div >
< / div >
< a id = "a3c8c11f9a0587bbfe09e2a348301849a" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a3c8c11f9a0587bbfe09e2a348301849a" > ◆ < / a > < / span > mark_proc_scheduled()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > static void mark_proc_scheduled < / td >
< td > (< / td >
< td class = "paramtype" > pid_t  < / td >
< td class = "paramname" > < em > index< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / td >
< td class = "mlabels-right" >
< span class = "mlabels" > < span class = "mlabel" > static< / span > < / span > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Mark a process as scheduled < / p > < dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > index< / td > < td > The PID to mark < / td > < / tr >
< / table >
< / dd >
< / dl >
< / div >
< / div >
< a id = "a92bbbaf5a589e3717ba7f91deaae0071" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a92bbbaf5a589e3717ba7f91deaae0071" > ◆ < / a > < / span > switch_to_thread()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void switch_to_thread < / td >
< td > (< / td >
< td class = "paramtype" > < a class = "el" href = "structThread.html" > Thread< / a > *  < / td >
< td class = "paramname" > < em > thread< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Switch to a thread and schedule the next ready thread in the current process, if there is one. < / p > < dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > thread< / td > < td > The thread to switch to < / td > < / tr >
< / table >
< / dd >
< / dl >
< / div >
< / div >
< a id = "a021c821360fc28b1a509b585f8d21769" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a021c821360fc28b1a509b585f8d21769" > ◆ < / a > < / span > tasking_block()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void tasking_block < / td >
< td > (< / td >
< td class = "paramtype" > < a class = "el" href = "tasking_8h.html#a4b1b32c1fc744438f665f0f1932dd207" > thread_state< / a >   < / td >
< td class = "paramname" > < em > newstate< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Block the current thread & yield < / p > < dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > newstate< / td > < td > The state to block it in < / td > < / tr >
< / table >
< / dd >
< / dl >
< / div >
< / div >
< a id = "a38bc7128c0f55dcb2b4ce0e36cae9c2b" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a38bc7128c0f55dcb2b4ce0e36cae9c2b" > ◆ < / a > < / span > tasking_create_task()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void tasking_create_task < / td >
< td > (< / td >
< td class = "paramtype" > void *  < / td >
< td class = "paramname" > < em > eip< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > void *  < / td >
< td class = "paramname" > < em > cr3< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > char  < / td >
< td class = "paramname" > < em > kmode< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > char  < / td >
< td class = "paramname" > < em > param1_exists< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > void *  < / td >
< td class = "paramname" > < em > param1_arg< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > char  < / td >
< td class = "paramname" > < em > param2_exists< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > void *  < / td >
< td class = "paramname" > < em > param2_arg< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > char  < / td >
< td class = "paramname" > < em > isThread< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Create a task < / p > < dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > eip< / td > < td > The start address of the task < / td > < / tr >
< tr > < td class = "paramname" > cr3< / td > < td > The address space of the task < / td > < / tr >
< tr > < td class = "paramname" > kmode< / td > < td > Whether the task is a kernel mode task < / td > < / tr >
< tr > < td class = "paramname" > param1_exists< / td > < td > Whether param1_arg is a valid value < / td > < / tr >
< tr > < td class = "paramname" > param1_arg< / td > < td > The thread's start function first parameter < / td > < / tr >
< tr > < td class = "paramname" > param2_exists< / td > < td > Whether param2_arg is a valid value < / td > < / tr >
< tr > < td class = "paramname" > param2_arg< / td > < td > The thread's start function second parameter/ < / td > < / tr >
< tr > < td class = "paramname" > isThread< / td > < td > Whether we are creating a new process or a thread in a process. If we are creating a theead, param2_arg becomes the PID for the newly created thread, and param2_exists must be 0. < / td > < / tr >
< / table >
< / dd >
< / dl >
< / div >
< / div >
< a id = "acf62dd83316df4b63f4a93587c9b791e" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#acf62dd83316df4b63f4a93587c9b791e" > ◆ < / a > < / span > tasking_exit()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void tasking_exit < / td >
< td > (< / td >
< td class = "paramtype" > int  < / td >
< td class = "paramname" > < em > code< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Terminate the current thread If the main thread terminates, the whole process terminates. < / p > < dl class = "section note" > < dt > Note< / dt > < dd > Currently, calling tasking_exit from any thread terminates the whole process. < / dd > < / dl >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > code< / td > < td > The exit code of the thread < / td > < / tr >
< / table >
< / dd >
< / dl >
< / div >
< / div >
< a id = "a347fac6db01ff796e5dc6d1fc44c2eef" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a347fac6db01ff796e5dc6d1fc44c2eef" > ◆ < / a > < / span > tasking_get_errno_address()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > int* tasking_get_errno_address < / td >
< td > (< / td >
< td class = "paramname" > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Get the adddress of errno for the current thread < / p > < dl class = "section return" > < dt > Returns< / dt > < dd > The address of errno < / dd > < / dl >
< / div >
< / div >
< a id = "a9555a59dc2340ce36ae1a84c984b3af0" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a9555a59dc2340ce36ae1a84c984b3af0" > ◆ < / a > < / span > tasking_get_PID()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > pid_t tasking_get_PID < / td >
< td > (< / td >
< td class = "paramname" > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Get the PID of the current thread. < / p > < dl class = "section return" > < dt > Returns< / dt > < dd > The current thread's PID < / dd > < / dl >
< / div >
< / div >
< a id = "a45f6d4112f15e33ba7a0e356f821d056" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a45f6d4112f15e33ba7a0e356f821d056" > ◆ < / a > < / span > tasking_init()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void tasking_init < / td >
< td > (< / td >
< td class = "paramname" > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Initialize tasking < / p >
< / div >
< / div >
< a id = "a47f424f3474f4298f1d6b65eeee5d0f6" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a47f424f3474f4298f1d6b65eeee5d0f6" > ◆ < / a > < / span > tasking_is_privleged()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > char tasking_is_privleged < / td >
< td > (< / td >
< td class = "paramname" > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Check whether the current process is privleged < / p > < dl class = "section return" > < dt > Returns< / dt > < dd > whether the current process is privleged < / dd > < / dl >
< / div >
< / div >
< a id = "ab4d000931b7ca87b83905b6172471d0e" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#ab4d000931b7ca87b83905b6172471d0e" > ◆ < / a > < / span > tasking_new_thread()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > pid_t tasking_new_thread < / td >
< td > (< / td >
< td class = "paramtype" > void *  < / td >
< td class = "paramname" > < em > start< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > pid_t  < / td >
< td class = "paramname" > < em > pid< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > char  < / td >
< td class = "paramname" > < em > param_exists< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > void *  < / td >
< td class = "paramname" > < em > param_arg< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Create a new thread < / p > < dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > start< / td > < td > The start address of the task < / td > < / tr >
< tr > < td class = "paramname" > pid< / td > < td > The PID that gets the new thread < / td > < / tr >
< tr > < td class = "paramname" > param_exists< / td > < td > Whether param_arg is a valid value < / td > < / tr >
< tr > < td class = "paramname" > param_arg< / td > < td > The thread's start function parameter < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > the TID of the thread < / dd > < / dl >
< / div >
< / div >
< a id = "a8daf634972bbe78df522aade52c180bf" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a8daf634972bbe78df522aade52c180bf" > ◆ < / a > < / span > tasking_unblock()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void tasking_unblock < / td >
< td > (< / td >
< td class = "paramtype" > pid_t  < / td >
< td class = "paramname" > < em > pid< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > pid_t  < / td >
< td class = "paramname" > < em > tid< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Unblock a thread < / p > < dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > pid< / td > < td > The PID that contains the thread to unblock < / td > < / tr >
< tr > < td class = "paramname" > tid< / td > < td > The TID in the process to unblock. < / td > < / tr >
< / table >
< / dd >
< / dl >
< / div >
< / div >
< a id = "a78aa02f7e342d1a6f76fb2c692086f50" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a78aa02f7e342d1a6f76fb2c692086f50" > ◆ < / a > < / span > tasking_yield()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void tasking_yield < / td >
< td > (< / td >
< td class = "paramname" > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Yield to the next ready thread in any process < / p >
< / div >
< / div >
< a id = "ad3a9873876af082690bffdb92292c7d6" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#ad3a9873876af082690bffdb92292c7d6" > ◆ < / a > < / span > unmark_proc_scheduled()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > static void unmark_proc_scheduled < / td >
< td > (< / td >
< td class = "paramtype" > pid_t  < / td >
< td class = "paramname" > < em > index< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / td >
< td class = "mlabels-right" >
< span class = "mlabels" > < span class = "mlabel" > static< / span > < / span > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Unmark a process as scheduled < / p > < dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > index< / td > < td > The PID to unmark < / td > < / tr >
< / table >
< / dd >
< / dl >
< / div >
< / div >
< / div > <!-- contents -->
< / div > <!-- doc - content -->
<!-- start footer part -->
< div id = "nav-path" class = "navpath" > <!-- id is needed for treeview function! -->
< ul >
< li class = "navelem" > < a class = "el" href = "dir_dc43877d82dd332f9fb2071fcca799d6.html" > kernel< / a > < / li > < li class = "navelem" > < a class = "el" href = "tasking_8c.html" > tasking.c< / a > < / li >
< li class = "footer" > Generated by
< a href = "http://www.doxygen.org/index.html" >
< img class = "footer" src = "doxygen.png" alt = "doxygen" / > < / a > 1.8.18 < / li >
< / ul >
< / div >
< / body >
< / html >