Mercurial > hg > Game > Atoc
view driver/procfs/processes.c @ 0:42f240cc4bc6
From: 太田 篤志 <atoc@namikilab.tuat.ac.jp>
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Sep 2009 13:44:18 +0900 |
parents | |
children |
line wrap: on
line source
/** * processes.c * SPE プロセスマネージャ spe_manager * procfs エントリ "processes" のハンドラ */ #include <linux/module.h> // カーネルモジュール全般 #include <linux/kernel.h> // printk #include <linux/semaphore.h> // down_interruptible, up #include <linux/spinlock.h> // spin_lock, spin_unlock #include "../main.h" #include "../critical.h" #include "../process_list.h" #include "processes.h" //============================================================================================== procfs_processes_read() /** * procfs_processes_read * procfs エントリ "processes" の read イベントハンドラ * * @param char * page * @param char ** start * @param off_t off * @param int count * @param int * eof * @param void * data * @return int */ int procfs_processes_read(char *page, char **start, off_t off, int count, int *eof, void *data) { int opened, written, waiting, running, not_released, released; struct semaphore *semaphore_for_process_list = get_semaphore_for_process_list(); spinlock_t *spinlock_for_process_list = get_spinlock_for_process_list(); // Critical Section (semaphore) >>> if (down_interruptible(semaphore_for_process_list)) goto procfs_processes_read__error1; // 各 SPE プロセス状態のプロセス数を取得 (セマフォをロックするだけで取得可能なもの) opened = get_process_count_opened(); written = get_process_count_written(); released = get_process_count_released(); // Critical Section (spinlock) >>> spin_lock(spinlock_for_process_list); { // 各 SPE プロセス状態のプロセス数を取得 (スピンロックも行わないと取得できないもの) waiting = get_process_count_waiting(); running = get_process_count_running(); not_released = get_process_count_not_released(); } spin_unlock(spinlock_for_process_list); // <<< Critical Section (spinlock) up(semaphore_for_process_list); // <<< Critical Section (semaphore) // プロセス数情報を出力する *eof = 1; return sprintf ( page, " Processes \n" "-------------------------\n" " Opened %9d\n" " Written %9d\n" " Waiting %9d\n" " Running %9d\n" " Not Released %9d\n" " Released %9d\n" "-------------------------\n" " Total %9d\n", opened, written, waiting, running, not_released, released, opened + written + waiting + running + not_released + released // Total ); procfs_processes_read__error1: return -ERESTARTSYS; }