مجید تقی لو

هدف اصلی من ارائه مطالب تخصصی در زمینه تحقیقاتیم است ولی بدم نمیاد شعر و طنز هم توش بنویسم

پاسخ به درخواستها
ساعت ۳:۳٥ ‎ب.ظ روز ۱۳۸٩/۱٢/۱۱  کلمات کلیدی:

به نام خدا

چندیست بر آنم که مطالب جدیدی برای شیفتگان علم ارسال کنم. بی شک  انجام هر کار خیری توفیق می خواهد که گویی از من فاصله گرفته است. با توجه به زمانبر بودن خلق نوشته علمی و مفید، درخواست دارم اندکی شکیبا باشید.  

                      ( بر سر آنم که گر ز دست بر آید     دست به کاری زنم که غصه سر آید)

 


 
دوست مجازی و ایمنی خودرو
ساعت ۸:٤۱ ‎ق.ظ روز ۱۳۸٩/٤/۱٦  کلمات کلیدی:

به نام خدا

امروزه پیشرفت تکنیکهای مجازی گری چشمگیر بوده و کاربرد فراوانی پیدا کرده است. در زیر لینک فیلمی قرار داده شده است، که نمایانگر نحوه استفاده از Hologram Maker جهت تسهیل امور رانندگی می باشد. با مرور این فیلم می توانید چگونگی کمک کردن یک انسان مجازی به راننده را لمس کنید.

 

ایجاد کمک راننده از طریق تکنیک هولوگرام

لینک داونلود فیلم


 
روش کامپایل linux و Minix
ساعت ٩:٠۸ ‎ق.ظ روز ۱۳۸۸/۱٠/۸  کلمات کلیدی:

به نام خدا

کامپایل مینیکس

مراحل کامپایل سیستم عامل مینیکس و ایجاد کرنل جدید آن به قرار زیر می باشد:

1. در ابتدا به دایرکتوری کدهای کرنل مراجعه شود.

cd  /usr/src

2. با استفاده از فرمان make کرنل را کامپایل کنید. ترتیب و نحوه استفاده از آن بصورت زیر می باشد. فرمانهای زیر کامپایل مجدد برای کل کدها را انجام می دهد.

make clean

make install

3.    برای کامپال جداگانه کرنل از فرمان make بصورت زیر استفاده می شود.

cd /usr/src/kernel

make clean

make

cd   /usr/src

make install

4.   حال سیستم باید راه اندازی مجدد شود.

5. در دایرکتوری /boot/image کرنل جدید کامپایل شده قرار می گیرد.

کامپایل لینوکس

برای کامپایل کرنل لینوکس چنین باید عمل شود:

مرحله 1 - داونلود آخرین ویرایش کرنل

مرحله 2 - بازیابی فایلهای فشرده سازی شده که فرمان لازم برای این کار در زیر آورده شده است:

# tar -xjvf linux-2.6.25.tar.bz2 -C /usr/src
# cd /usr/src                               

مرحله 3- پیکربندی کرنل

قبل از کامپایل کرنل باید اطمینان حاصل شود که ابزارهای کامپایل (gcc) در سیستم بصورت نصب شده موجود می باشد. اگر این ابزار موجود نباشد می توان با فرمان زیر در سیستم debian آن را دریافت نمود (در اکثر سیستم ها این فرمان لازم نیست و بصورت پیش فرض این ابزارها نصب شده موجود می باشد.):

# apt-get install gcc

سپس برای پیکر بندی از یکی از فرمانهای زیر می توان استفاده نمود:

1 - make menuconfig: یک منوی متنی را در اختیار کابر قرار می دهد. از طریق این ابزار می توان از طریق یک سرور راه دور نیز کرنل را کامپایل نمود.

2- make xconfig: یک واسط گرافیکی در محیط x برای انجام پیکربندی در اختیار کاربر قرار می دهد.

برای مثال می توان فرمان زیر را تایپ کرد.

$ make menuconfig

می توان از منوی ظاهر شده انتخابهای مناسب و مورد علاقه را انجام داد.

مرحله 4- کامپایل کرنل

$ make

با ارسال این فرمان، یک image فشرده شده از کرنل ایجاد می شود.

حال برای شروع کامپایل ما‍ژولهای کرنل فرمان زیر وارد می شود.

$ make modules

برای نصب ما‍ژولها باید کاربر root بود از این رو از فرمان su استفاده شده است

$ su -(pass)          
# make modules_install

مرحله 5- نصب کرنل

تاکنون ما کرنل را کامپایل کردیم و ماژولهای آن را نصب نمودیم، حال زمان نصب خود کرنل می باشد. 

# make install

این فرمان سه فایل را در دایرکتوری boot/ نصب کرده و در فایل پیکربندی grupدستکاری های لازم را انجام می دهد.  

  • System.map-2.6.25
  • config-2.6.25
  • vmlinuz-2.6.25
  • مرحله 6- ایجاد initrd image

    کافیست دستور زیر را در خط فرمان وارد کنید:

    # cd /boot                            
    # mkinitrd -o initrd.img-2.6.25 2.6.25

    initrd شامل درایورهای سخت افزاری می باشد که برای بارگذاری سیستم عامل مورد نیاز می باشد. تمام کامپیوترها آن را نیاز ندارند ولی ایجاد آن برای اطمینان لازم است.  

    مرحله 7- دستکاری فایل پیکربندی grub

    برای این منظور از ویرایشگر vi استفاده می شود.

    # vi /boot/grub/menu.lst

    title           Debian GNU/Linux, kernel 2.6.25 Default
    root            (hd0,0)
    kernel          /boot/vmlinuz root=/dev/hdb1 ro
    initrd          /boot/initrd.img-2.6.25
    savedefault
    boot 

    بخاطر داشته باشید که پیکربندی  root=/dev/hdXX باید با دقت انجام شود. 
    حال کافیست پس از ذخیره سازی  از برنامه vi خارج شوید. 
    مرحله 8- سیستم را راه اندازی مجدد کنید
    reboot #

     
    روش نگارش مقاله بین المللی در حوزه فناوری اطلاعات و مهندسی کامپیوتر
    ساعت ٧:٥۱ ‎ق.ظ روز ۱۳۸۸/۱٠/٧  کلمات کلیدی:

    به نام خدا

    دراین نوشته قصد دارم  یافته های خود را در نگارش مقاله به دوستان عزیز تقدیم کنم.

    انتخاب موضوع

    جهت خلق نوآوری علمی و ارائه آن بصورت مقاله پژوهشی، اولین قدم، انتخاب موضوع میباشد. در این مسیر، موضوع باید دارای چالشهای تحقیقاتی باشد و یا به عبارت دیگر بتوان در آن  open problem   پیدا کرد. مسائل مرتبط با تکنولو‍ژی های نوین دارای چالشهای تحقیقاتی فراوانی می باشند و به راحتی می توان در آن نوآوری ایجاد کرد.

    نوآوری یا  contribution

    در پاراگراف پیشین، از نوآوری صحبت شد. حال وقت آن است که مفهوم و منظور از نوآوری تشریح شود. بطور کلی هدف از نوآوری انجام کار پژوهشی است که پیش از این انجام نشده و دارای دستاورد جدید علمی میباشد. در مرحله اول خلق یک نوآوری کاملا جدید از ارزش علمی بالایی برخوردار است و معمولا از دانشجویان دوره دکتری، انجام چنین کار پژوهشی مورد انتظار است. نوع دیگر نو آوری،  از طریق ایجاد تغییر در روشهای ارائه شده پیشین و یا از ترکیب دو یا چند روش فراهم می شود. در چنین کاری، باید ایجاد تغییرات، بهبودی در روش پیشین ایجاد کند. برای این منظور باید پارامترهای لازم برای ارزیابی روش، استخراج شده و بر مبنای آنها روش ارزیابی شود. بطور معمول پژوهشهای این دسته توسط دانشجویان کارشناسی ارشد صورت می گیرد. دسته آخر کار پژوهشی survey paper می باشد. در این روش محقق تمام تحقیقات مهم مربوط به یک موضوع را جمع آوری کرده و با هم مقایسه می کند. نحوه دسته بندی روشهای مختلف و ارزیابی مقایسه ای از ارزش بالایی برخوردار است و وزن علمی مقاله را مشخص می کند.

     ساختار پایه مقاله علمی

    بطور کلی هر مقاله علمی از پنج بخش اصلی تشکیل می شود که محتوای هر بخش در ادامه تشریح می شود:

    1-چکیده

    در این بخش خلاصه کار پژوهشی انجام شده در مقاله آورده می شود و خواننده با مطالعه آن متوجه میشود که در مقاله مورد نظر چه یافته هایی حاصل خواهد شد.  

    2- مقدمه

    هدف از نوشتن مقدمه در مقاله تعریف صورت مساله و تاکید بر اهمیت و ضرورت موضوع تحقیقاتی می باشد. تعریف واژه های استفاده شده در مقاله و همچنین  تشریح مطالب پیشنیاز جهت بالابردن دانش خواننده جهت درک مطالب آتی در این بخش آورده می شود. شناسایی پارامترهای مهم ارزیابی و تعریف آنها را نیز می توان  در این بخش آورد.

    3- کارهای مرتبط

    کار علمی و پژوهشی وقتی ارزش بالایی پیدا می کند که نویسندگان آن ضمن تسلط بالا به موضوع، تمام تاریخچه کارهای پیشین را مطالعه و درک کامل کرده باشند. در این صورت می توان به مطالب آن مقاله اطمینان نسبی پیدا کرد و ادعای آن را با دقت بالا مورد بررسی قرار داد. اگر تعداد کارهای مرتبط بالا باشد، در انتخاب آنها جهت مطالعه و بررسی، توجه ویژه و دقت بالایی لازم است. پارامتر اول در انتخاب کارهای پیشین، اعتبار ژورنال چاپ کننده مقاله و پارامتر دوم تاریخ چاپ مقاله می باشد. یک راه سریع برای نوشتن این قسمت از مقاله، کمک گرفتن از Survey Paper چاپ شده در آن موضوع می باشد.

     4- ایده اصلی

    در این بخش نو آوری مقاله به دقت و بصورت جامع تشریح می شود. نگارش این بخش در گرفتن پذیرش تاثیر بالایی دارد.

    5- تحلیل و ارزیابی

    حال زمان اثبات ادعای نویسنده مقاله فرا رسیده است. مقاله زمانی دارای ارزش علمی است که بتواند کار نو برای حل یک مشکل پژوهشی انجام دهد. در راهکارهای ارئه شده مسائل پژوهشی مختلفی وجود دارد که باید حل شوند به عنوان مثال: کارایی، امنیت و .... جهت نمایش بهبود باید پارامترها بدقت ارزیابی شوند. شرایط محاسبه پارامترهای ارزیابی باید برای تمام روشها یکسان باشد تا بتوان در یک وضعیت عادلانه مقایسه انجام داد.

    6- نتیجه گبری

     اشاره به نتایج تحقیق انجام شده و بهبود های حاصل از آن در این بخش انجام می شود. کارهای تحقیقاتی آتی مورد نیاز برای تکمیل پژوهش انجام شده، در این بخش آورده می شود.

    7- منابع

    تمام منابع استفاده شده، بایددر این بخش ذکر شود. در غیر اینصورت، نویسنده مقاله در لیست سیاه قرار داده می شود و هیچ مقاله ای از آن نویسنده در میادین بین المللی پذیرفته نمی شود. فرمت ذکر منابع معمولا توسط کمیته اجرایی کنفرانسها اعلام می شود. می توان از فرمت استاندارد IEEE استفاده نمود.

     


     
    کاربرد تکنولوژی در ایجاد حس ششم
    ساعت ۸:٢٧ ‎ق.ظ روز ۱۳۸۸/۸/۱٧  کلمات کلیدی:

    حس ششم

    دانشجویی در آزمایشگاه چند رسانه ای دانشگاه MIT، یک سیستم محاسباتی قابل پوشیدن طراحی و پیاده سازی کرده است که تمام سطوح را به یک صفحه نمایش محاوره ای تبدیل می کند. فردی که این ابزار را می پوشد، با احضار مجازی نور رنگی و داده های اینترنت و سپس ناپدید کردن آن چنین قابلیتی را فراهم می سازد.

    آقای Patie Maes خبر از تحقیقی داد که در آن هدف این کار پژوهشی را ایجاد حس ششم برای انسان اعلام کرده است.

    حس ششم

    در جهان واقع، ما از پنج حس برای دریافت اطلاعات پیرامونی و پاسخ دهی با آن استفاده می کنیم. اما اطلاعات زیادی وجود دارد که می تواند به ما کمک کند تا جهان را  بگونه ای فراتر از آنچه که حس پنجگانه در اختیار ما قرار می دهد درک کنیم. این اطلاعات از طریق اینترنت و   کامپیوتر فراهم می شود. برای کسب اطلاعات بیشتر و آشنا شدن با روش این پژوهشگر در اینجا شما عزیزان را به داونلود فیلم، نمایش قابلیتهای طرح، از طریق لینک زیر دعوت می کنم:

                                       داونلود فیلم

    -


     
    مقدمه ای بر درایور نویسی
    ساعت ۱:۱٦ ‎ب.ظ روز ۱۳۸۸/۸/۱۳  کلمات کلیدی:

    در این یادداشت، مقدمه ای بر نحوه نوشتن درایور در سیستم عاملهای خانواده یونیکس آورده شده است.

    درایور سخت افزاری، همانند یک بسته سیاه است که جزئیات سخت افزار و پیچیدگی کار با آن را از دید کاربر پنهان می سازد. برای مستقل سازی مشخصات خاص درایور باید از توابع فراخوان استاندارد استفاده شود. نقش اصلی در نوشتن درایو، ایجاد نگاشت مناسب بین توابع فراخوان و عملیان خاص سخت افزار مورد نظر می باشد. این بسته های نرم افزاری می توانند جدا از کرنل پیاده سازی شوند و در مواقع لزوم در  زمان اجرا به کرنل وصل شوند.

    بطور کلی درایور سخت افزاری روش و مکانیزم دسترسی به سخت افزار را پیاده سازی می کند و باید بگونهای نوشته شود که هیچ سیاست خاصی را به کاربر تحمیل نکند. برای این منظور،‌ باید درایور از عملیات سنکرون و آسنکرن پشتیبانی کند و بتواند چندین بار فعال و غیر فعال شود و همچنین تمام قابلیت سخت افزار را بکار بگیرد. این نوع نرم افزارها باید بگونه ای نوشته شوند که توسعه و نگهداری آنها راحت بوده و در مد کاربر بتوان به راحتی از آن استفاده نمود.

    معماری هسته لینوکس

    -بخش مدیریت فرایند: نقش اصلی این بخش، ایجاد و از بین بردن فرایندها در سیستم عامل می باشد. در ضمن پشتیبانی از ارتباطات بین فرایندی همانند pipe و همچنین زمانبندی بین فرایندها جهت مشخص کردن نحوه به اشتراک گذاری CPU از جمله وظایف این بخش به شمار می رود.

    -بخش مدیریت حافظه: بطور خلاصه مدیریت آدرس مجازی توسط این بخش صورت می گیرد.

    -بخش مدیریت سیستم فایل:همه چیز در سیستم عامل یونیکس بصورت فایل قابل دسترسی می باشد. انواع مختلفی از سیستم فایل در لینوکس موجوی می باشد.

    -بخش کنترل سخت افزار: هر عملی در سیستم به یک سخت افزار فیزیکی نگاشت می شود. این بخش موارد مربوطه مثل مدیریت exception را انجام می دهد.

    -بخش مدیریت شبکه: مدیریت بسته های شبکه، مسیر یابی و آدرس دهی توسط این بخش انجام می شود.

    شکست کرنل لینوکس

     

    ماژولهای قابل بارگذاری

    ماژولهای قابل بارگذاری، این امکان را فراهم می کنند تا در زمان اجرا شما بتوانید قابلیتی را به کرنل اضافه کنید. به هر واحد قابل اضافه کردن module گفته می شود. از برنامه insmod برای اضافه کردن ماژول به کرنل استفاده می شود و جهت حذف آن از برنامه rmmod می توان استفاده کرد.

    انواع مختلف درایورهای سخت افزاری

     

    در حال آماده سازی .....

     

     


     
    مفاهیم برنامه سازی کرنل لینوکس (Linux Kernel Programmin)
    ساعت ۱٢:۳٦ ‎ب.ظ روز ۱۳۸۸/٧/٢٩  کلمات کلیدی:

    بّه نام خدا

    قصد دارم در لابه لای کارهای خود درباره مفاهیم برنامه سازی کرنل لینوکس نیز مطالبی بنویسم. سیلابس مباحث به قرار زیر است:

    - مفاهیم پایه کرنل لینوکس

    - مروری بر بخشهای مختلف کرنل لینوکس و کدهای آن

    - مدیریت حافظه در لینوکس

    - مدیریت فرایندها

    - مدیریت وقفه ها

    - مدیریت زمان و هم زمانی

    - درایور نویسی

    - سیستم فایل لینوکس

    - شبکه در لینوکس

    - درایور شبکه در لینوکس

    -  ارتباطات بین فرایندی

    - امنیت لینوکس (کرنل)

     


     
    اصول برنامه نویسی شبکه (Network Socket Programming)
    ساعت ۱۱:٢۱ ‎ق.ظ روز ۱۳۸۸/٧/٢۸  کلمات کلیدی:

     

    مقدمه

    آشنایی با مفاهیم برنامه سازی شبکه، یکی از نیازهای مهندسان کامپیوتر می باشد. این افراد در مسیر کار خود با پروژه های شبکه ای روبر خواهند شد که به احتمال زیاد نیاز به برقراری ارتباطات شبکه خواهد داشت. همچنین اگر چنین مساله ای هم اگر پیش نیاید، آشنایی با مفاهیم شبکه، دید بهتری را برای هر مهندس شبکه فراهم می سازد. از اینرو، من قصد دارم در ادامه به شرح مفاهیم و جزئیات برنامه سازی شبکه در لینوکس اشاره کنم. لازم به یاد آوری است که این مفاهیم مستقل از سیستم عامل می باشد و به راحتی می توان از آن در سیستم عاملهای مختلف استفاده کرد.

    مدل سرویس دهنده / سرویس گیرنده

    مدل client server

    این مدل یک معماری نرم افزار توزیع شده است که در آن بارکاری و وظایف بین سرویس دهنده ها (server) و سرویس گیرنده ها (clients) تقسیم می شود. بطور معمول عملیات سرویس دهنده وگیرنده بر روی شبکه کامپیوتری که از سخت افزار مجزا تشکیل شده اند انجام می شود.

    یک ماشین سرور، میزبانی است که دارای کارایی بالا  (high-performance) بوده و با اجرای یک یا چند برنامه سرویس دهنده، منابع اش را بین سرویس گیرنده ها به اشتراک می گذارد. میزبان  سرویس گیرنده منبعی را برای اشتراک ارائه نمی دهد. ولی درخواستش را جهت دریافت سرویس ارسال می کند. بنا براین، سرویس گیرنده، مقداردهی اولیه جهت ایجاد یک نشست ارتباطی را انجام می دهد و سرویس دهنده تنها منتظر (listen) دریافت درخواستها می ماند.

    در ارتباطات شبکه ای، هر ماشین با آدرس IP، آدرسدهی می شود و برای آدرسدهی یک پروسس در ماشین از آدرس پورت استفاده می شود.

    آدرسدهی هر پروسس با پورت

    همانطور که در شکل بالا مشاهده می کنید، سرور FTP از پورت 21 استفاده می کند. با این روش می توان به راحتی چندین سرور را در یک ماشین راه اندازی کرد.

    تعریف socket

    از دید هسته سیستم عامل (kernel) سوکت یک نقطه انتهایی (endpoint)  ارتباط می باشد. ولی از دید برنامه کاربردی، سوکت همانند توصیفگر فایل می باشد که به آن اجازه نوشتن و خواندن به/از شبکه را می دهد.

    برنامه های سرویس دهنده و سرویس گیرنده از طریق نوشتن و خواندن در توصیفگر سوکت میتوانند با هم در ارتباط باشند. تفاوت اصلی فایلهای عادی و توصیفگر سوکت در نحوه باز کردن (open) در برنامه کاربردی می باشد.

    ترتیب بایتها در شبکه big-endian هست در حالی که میزبان میتواند little-endian نیز باشد. در شکل زیر تفاوت این دو به وضوح نمایش داده شده است.

    LSB vs MSB

    برای یکسان سازی ترتیب بایتها توابعی طراحی شده است که به قرار زیر می باشند:

    - ()htons و ()htonl که ترتیب بایت میزبان را به شبکه تبدیل می کند.

    - ()ntohs و ()ntohl  که ترتیب بایت را شبکه به میزبان تبدیل می کند.

    در ادامه توابع مهم و پارامترهای مورد نیاز آورده شده است. توضیحات مختصر برای هر یک از پارامترها مقابل آن آورده شده است.

    SOCKET: int socket(int domain, int type, int protocol);
    domain := AF_INET (IPv4 protocol)
    type := (SOCK_DGRAM or SOCK_STREAM )
    protocol := 0 (IPPROTO_UDP or IPPROTO_TCP)
    returned: socket descriptor (sockfd), -1 is an error
    BIND: int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
    sockfd - socket descriptor (returned from socket())
    my_addr: socket address, struct sockaddr_in is used
    addrlen := sizeof(struct sockaddr)

    struct sockaddr_in  {
      unsigned short  sin_family;  /* address family (always AF_INET) */
      unsigned short  sin_port;    /* port num in network byte order */
      struct in_addr  sin_addr;    /* IP addr in network byte order */
      unsigned char   sin_zero[8]; /* pad to sizeof(struct sockaddr) */
    };

    LISTEN: int listen(int sockfd, int backlog);
    backlog: how many connections we want to queue
    ACCEPT: int accept(int sockfd, void *addr, int *addrlen);
    addr: here the socket-address of the caller will be written
    returned: a new socket descriptor (for the temporal socket)
    CONNECT: int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); //used by TCP client
    parameters are same as for bind()
    SEND: int send(int sockfd, const void *msg, int len, int flags);
    msg: message you want to send
    len: length of the message
    flags := 0
    returned: the number of bytes actually sent
    RECEIVE: int recv(int sockfd, void *buf, int len, unsigned int flags);
    buf: buffer to receive the message
    len: length of the buffer (“don’t give me more!”)
    flags := 0
    returned: the number of bytes received

    SEND (DGRAM-style): int sendto(int sockfd, const void *msg, int len, int flags, const struct sockaddr *to, int tolen);
    msg: message you want to send
    len: length of the message
    flags := 0
    to: socket address of the remote process
    tolen: = sizeof(struct sockaddr)
    returned: the number of bytes actually sent
    RECEIVE (DGRAM-style): int recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen);
    buf: buffer to receive the message
    len: length of the buffer (“don’t give me more!”)
    from: socket address of the process that sent the data
    fromlen:= sizeof(struct sockaddr)
    flags := 0
    returned: the number of bytes received
    CLOSE: close (socketfd);

    ارتباطات سرویس دهنده / سرویس گیرنده می تواند اتصال گرا و یا بی اتصال باشد. در شکل زیر نحوه برقراری ارتباط بی اتصال را نشان می دهیم:

    ارتباط connectionless

    و شکل زیر نحوه ارتباط برنامه سرور و مشتری در ارتباط اتصال گرا را نمایش می دهد:

    ارتباط connection-oriented

    برای بالابردن درک خواننده از مفهوم برنامه سازی شبکه، در لینک زیر مثال ساده echo  client-server  آورده شده است.

    http://www.paulgriffiths.net/program/c/srcs/echoserv.tar.gz


     
    ← صفحه بعد