linux 0.11 ÄÚºËѧϰ truncate.c
/*
* ¸ÃÎļþÖ÷ҪʵÏÖµÄÊÇtruncateº¯Êý£¬¸Ãº¯ÊýÊÇÊÍ·ÅÖ¸¶¨i
* ½ÚµãÔÚÉ豸ÉÏÕ¼ÓõÄËùÓÐÂß¼¿é£¬°üÀ¨Ö±½Ó¿é¡¢Ò»´Î¼ä
* ½Ó¿éºÍ¶þ´Î¼ä½Ó¿é
*/
/*
* linux/fs/truncate.c
*
* (C) 1991 Linus Torvalds
*/
#include <linux/sched.h>
#include <sys/stat.h>
/* ÊÍ·ÅÒ»´Î¼ä½Ó¿é£¬²ÎÊýint dev, int blockÖ¸Ã÷Ò»´Î¼ä½Ó¿éµÄÉ豸ºÅ */
static void free_ind(int dev,int block)
{
struct buffer_head * bh;
unsigned short * p;
int i;
// Èç¹ûÂß¼¿éºÅΪ0£¬Ôò·µ»Ø
if (!block)
return;
// ¶Áȡһ´Î¼ä½Ó¿é£¬²¢ÊÍ·ÅÆäÉϱíÃ÷ʹÓõÄËùÓÐÂß¼
// ¿é£¬È»ºóÊͷŸÃÒ»´Î¼ä½Ó¿éµÄ»º³åÇø
if (bh=bread(dev,block)) {
p = (unsigned short *) bh->b_data;
for (i=0;i<512;i++,p++)
if (*p)
free_block(dev,*p);
brelse(bh);
}
free_block(dev,block);
}
/* ÊͷŶþ´Î¼ä½Ó¿é£¬int dev, int blockÖ¸Ã÷¶þ´Î¼ä½Ó¿éµÄÂß¼ºÅ */
static void free_dind(int dev,int block)
{
struct buffer_head * bh;
unsigned short * p;
int i;
if (!block)
return;
if (bh=bread(dev,block))
{
p = (unsigned short *) bh->b_data;
for (i=0;i<512;i++,p++)
if (*p)
free_ind(dev,*p);
brelse(bh);
}
free_block(dev,block);
}
/* ½«½Úµã¶ÔÓ¦µÄÎļþ³¤¶È½ØÎª0£¬²¢ÊÍ·ÅÕ¼ÓõÄÉ豸¿Õ¼ä */
void truncate(struct m_inode * inode)
{
int i;
// Èç¹û²»Êdz£¹æÎļþ»òÕßÊÇĿ¼Îļþ£¬Ôò·µ»Ø
if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)))
return;
// ÊÍ·Åi ½ÚµãµÄ7 ¸öÖ±½ÓÂß¼¿é£¬²¢½«Õâ7 ¸öÂß¼¿éÏîÈ«ÖÃÁã
/*********************Ö±½Ó¿é************************/
for (i=0;i<7;i++)
if (inode->i_zone[i]) {
free_block(inode->i_dev,inode->i_zone[i]);
inode->i_zone[i]=0;
}
/*************************************************/
// ÊÍ·ÅÒ»´Î¼ä½Ó¿é
free_ind(inode->i_dev,inode->i_zone[7]);
// ÊͷŶþ´Î¼ä½Ó¿é
free_dind(inode->i_dev,inode->i_zone[8]);
// Âß¼¿éÏî7¡¢8 ÖÃÁã
inode->i_zone[7] = inode->i_zone[8] = 0;
// Îļþ´óСÖÃÁã
inode->i_size = 0;
// ÖýÚ
Ïà¹ØÎĵµ£º
ǰÑÔ:ÕâÒ»ÕÂÎÒÃÇÌÖÂÛÒ»ÏÂLinuxϵÄÐźŴ¦Àíº¯Êý.
LinuxϵÄÐźŴ¦Àíº¯Êý:
1.ÐźŵIJúÉú
2.ÐźŵĴ¦Àí
3.ÆäËüÐźź¯Êý
--------------------------------------------------------------------------------
Ò»¸öʵÀý
1¡£ÐźŵIJúÉú ......
Yum£¨È«³ÆÎª Yellow dog Updater, Modified£©ÊÇÒ»¸öÔÚFedoraÖеÄshellǰ¶ËÈí¼þ°ü¹ÜÀíÆ÷¡£»ùÓÚrpm°ü¹ÜÀí£¬Äܹ»´ÓÖ¸¶¨µÄ·þÎñÆ÷×Ô¶¯ÏÂÔØRPM°ü²¢ÇÒ°²×°£¬¿ÉÒÔ×Ô¶¯´¦ÀíÒÀÀµÐÔ¹ØÏµ£¬²¢ÇÒÒ»´Î°²×°ËùÓÐÒÀÀµµÄÈíÌå°ü£¬ÎÞÐë·±ËöµØÒ»´Î´ÎÏÂÔØ¡¢°²×°¡£
ÏÂÃæ½éÉÜÒ»¸ö´Ó¹âÅÌ×öyumÔ´µÄСʵÑé
±¾ÊÔÑéʹÓÃCentOS-5.4-i386-bin,DVD.isoÈí¼þ° ......
ѹËõºÍ´ò°üÎļþ
¡¡¡¡* .bz2 — ʹÓÃbzip2ÃüÁîѹËõµÄÎļþ£¬¿ÉÒÔʹÓÃbzip2 -d filename ½â°ü
¡¡¡¡* .gz — ʹÓÃgzipÃüÁîѹËõµÄÎļþ£¬¿ÉÒÔʹÓÃgunzip -d filename ½â°ü
¡¡¡¡* .tar — ʹÓÃtar´ò°üµÄÎļþ£¬¼´tarballÎļþ£¬¿ÉÒÔʹÓÃtar xf filename ½â°ü
¡¡¡¡* .tbz — ʹÓÃtar´òÍê°üºóÔÙÒÔbzip2ÃüÁ ......
1. LinusºÍBill
ËÆºõÔÚÒ»Ò¹Ö®¼ä£¬Õâ¸öÃû×ÖͻȻ±äµÃͬÏó±È¶û¡£¸Ç´ÄÒ»ÑùµÄ¶úÊìÄÜÏê¡£µ«ÊDZȶû¡£¸Ç´Ä£¬ÄÄÅÂÉí¼ÛÓÐÊý²»Çå±¶µÄ°ÙÍòÃÀ½ð£¬Ò²ÓÀÔ¶²»»á±ä³ÉLinux Torvalds¡£Õâλ29ËêµÄ·ÒÀ¼ÈË£¬¼òµ¥¶øÇ¿´óµÄLinux²Ù×÷ϵͳµÄ´´ÔìÕߣ¬³¬Ô½Á˸ǴĵÄÉñ»°¡£Ò²Óд«ÎÅ˵¸Ç´ÄÊÇÒ»¸ö׿ԽµÄ³ÌÐòÔ±£¬µ«LinusÊÇ»õÕæ¼ÛʵµÄ¸ßÊ ......
//
ͬ²½ÎÊÌ⣺
¶Ô¹²ÏíÊý¾ÝµÄ·ÃÎÊ£¬ÐèҪͬ²½£¬»¥³â¡£
ÔÚÖжϣ¬ÇÀÕ¼£¬¶àCPU£¬¶àÏß³Ì »·¾³ÏÂÓÈÆäÖØÒª¡£
ͬ²½·ÖΪ: ×èÈûͬ²½£¬·Ç×èÈûͬ²½
×èÈûͬ²½ÓÐÐí¶àʵÏÖ·½Ê½ÁË£ºmutex, semaphore. ×èÈûͬ²½Ê¹Óò»µ±¾Í¿ÉÄÜÔì³ÉËÀËø£¬»îËø£¬ÓÅÏȼ¶·´×ª¡£
·Ç×èÈûͬ²½£º£¨ÏÖÔÚÁ÷ÐÐÈýÖÖ£©
wait free ºÜÄÑʵÏÖ£¬Ë¼ÏëÊDZ¾Ïß³ÌÓÐÏÞ²½¾Í ......