Archive for the 'Розробка софту' Category

Чому мій колега кращий програміст, аніж ви

понеділок, Серпень 22nd, 2011

Маю чудового колегу. Цей пост про нього. Назвемо його Іваном. Іван — унікальна людина. Він належить до тієї рідкісної категорії людей, працювати з якими мріють усі: програмісти, тестери, менеджери, клієнти, і навіть прибиральники… Будь хто з його колег скаже, що він один з найкращих інженерів, з яким їм доводилось будь коли працювати. А ось чому.

  1. Іван багато читає. Його мінімум — книжка на тиждень. Не важливо хто його цьому навчив, Стів Павліна, чи життєвий досвід. Головне, що він знає: 1 книжка — це достатньо мало, щоб відбирати його вільний час, однак, ці 50 з лишком книжок на рік дозволяють йому безперестанно вчитися, отримувати нові знання, і змушують його мізки постійно працювати, обдумуючи прочитане. Він знає, що мозок — це м’яз, і, якщо його не тренувати — він почне тупіти.
  2. Він схиблений на освіті. Іван витрачає практично увесь свій вільний час та гроші на навчання. Він вивчає іноземні мови, відвідує професійні тренінги, практично не пропускає тематичних конференцій, а суботні вечора приводить за переглядом відеозаписів лекцій відомих університетів.
  3. Він бере активну участь у проектах з відкритими джерельними текстами, регулярно дописує до Вікіпедії, а також займається перекладом технічної документації на та локалізацією програмного забезпечення на українську. І робить він це дуже якісно.
  4. Іван дуже охоче ділиться своїми знаннями. Він знає на скільки егоїстично цього не робити, і, що це ще один спосіб навчання; чудовий спосіб навчання. Він веде кілька популярних технічних блоґів, виступає на конференціях та локальних групах по інтересам.
  5. Він не припиняє думати про роботу навіть вдома, але вміє повністю переключатись на інше, якщо це потрібно.
  6. Іван експерт в усіх основних програмних та апаратних інструментах, які використовує у своїй роботі. Власне, який сенс применшувати його крутість? Він — довбаний ніндзя в С, Python`і та Linux`і…
  7. Іван надзвичайно дружелюбний. З їм не потрібно намагатись знайомитись — він сам підійде до вас, привітається, і запросить на обід. Він — один з тих рідкісних людей, які й справді щиро посміюються вам вранці говорячи “Привіт!”. Ця не притворна щирість та відкритість дозволяє йому розташувати до себе людей, і створює йому надзвичайно позитивний імідж, як людини та, як програміста.
  8. Він тримає себе у хорошій фізичній формі. Іван щонайменше чотири рази на тиждень бігає десятикілометрівку, щоранку відтискається, і регулярно ходить підтягуватись на перекладину під час робочого дня. Він не вважає ці 8 годин на тиждень втратою часу, як більшість з вас, бо знає, що насправді це інвестиція, яка допомагає йому завжди бути в тонусі, відчутно підвищує його працездатність та змушує його мізки працювати краще.
  9. Іван завжди має охайний вигляд. Він не дозволяє собі не голитись по кілька тижнів, чи боронь Боже, ходити в одній сорочці два дні підряд або ж ще гірше — не приймати душ по кілька днів, навіть у моменти “авралів”.
  10. Він прокидається разом зі сходом сонця. Так, я знаю, ви — сови. Власне кажучи, ви просто ліньтюхи… Іван же знає, що перші кілька годин після сходу сонця його мізки працюють найкраще, і він часто встигає зробити усю денну роботу ще до того, як більшість з вас приходить на роботу запухлими від сну. Він лягає спати рано, бо знає, що робота після заходу сонця — це вже не робота, а жалюгідні спроби зробити щось корисне, до того ж, йому рано прокидатися ;)
  11. Ви не повірите, але у нього є сім’я. Вродлива і дуже розумна дружина (ви ж розумієте, що згідно із вселенським законом справедливості інакше й бути не могло) та чудові діти, яким він також встигає приділяти час.
  12. Його життя має конкретну мету. Іванове життя сповнене сенсу; він знає навіщо робить усе вище написане, і це слугує для нього надпотужною мотивацію.

Ось такого я маю колегу…

Як додати системний виклик до ядра Linux

неділя, Серпень 1st, 2010

Системний виклик — це інтерфейс між адресним простором користувача (user-space) і сервісами, які надаються ядром Linux. Оскільки даний сервіс надається ядром, виконати функцію ядра напряму не є можливим; тому слід використовувати спеціальний інтерфейс між простором ядра та користувача. Таким інтерфейсом є системний виклик (system call).

Ядро використовує системні виклики для надання програмам, які працюють у просторі користувача спосіб для запиту на отримання певних сервісів від неї, які у звичайних умовах не дозволяються. До таких сервісів належать постійна пам’ять, оперативна пам’ять, мережа, управління процесами, тощо.. Наприклад, якщо процес у просторі користувача захоче прочитати файл — йому доведеться виконати системні виклики ‘open’ та ‘read’.

Системні виклики не викликаються процесами безпосередньо. Зазвичай, у стандартній бібліотеці мови С присутні функції-обгортки, які надають зручні інтерфейси до усіх системних викликів.

У цій статті я коротенько опишу Linux system calls interface, і покажу, як додати до ядра новий системний виклик. Я використовував ядро версії 2.6.32.

Read the rest of this entry »

Пришвидшення процесу компіляції ядра Linux

п`ятниця, Червень 25th, 2010

Чекати, доки ядро компілюється — завдання для дуже пасивних і спокійних програмістів. Та й фізично, як не дивно, далеко не завжди є достатньо часу. Ось кілька порад, які допоможуть пришвидшити цей процес:

1. Якщо у вас багатоядерний процесор — запускайте make з параметром -j, значення якого вказує на кількість процесів, на які розпаралелюється компіляція. Так, наприклад, make -j 2 розпаралелює компіляцію на два процеси, що суттєво пришвидшує її на двоядерних процесорах.
2. Якщо можливо — запускайте gcc з ключиком -pipe, який змушує компілятор використовувати пайпи замість тимчасових файлів.
3. Вимкніть параметр CONFIG_DEBUG_KERNEL, якщо він вам не потрібен.
4. Повимикайте в конфігурації ядра усі непотрібні (ну гаразд, бодай найбільш явні) параметри.
5. Встановіть і налаштуйте ccache. Він кешує об’єктні файли. Щоправда, з ccache потрібно бути досить обережним, бо той може наробити чимало проблем, якщо вам потрібно перезібрати ядро з нуля, в такому разі не забувайте чистити кеш ccache.
6. Спробуйте distcc, який розпаралелює компіляцію на кілька фізичних машин.
7. Якщо маєте бодай 2 Ґб оперативки — спробуйте tmpfs. Він дозволяє змонтувати будь яку теку прямо в оперативну пам’ять, що суттєво пришвидшує роботу з тимчасовими файлами, яких під час компіляції створюється дуже не мало. Приклад:

# sudo mount -t tmpfs -o size=700M, mode=0777 tmpfs /usr/src/linux

Розробка для ядра Linux — 2. Ще трохи простих, але важливих речей

понеділок, Червень 21st, 2010

Цей допис є продовженням і доповненням першого (Розробка для ядра Linux — 1. printk(“Привіт, світе!\n”)). Тут я розгляну такі базові, але дуже важливі речі, як залежність версій і таблиця символів ядра.

Read the rest of this entry »

Розробка для ядра Linux — 1. printk(“Привіт, світе!\n”)

понеділок, Червень 14th, 2010

Я нещодавно серйозно (як мені здається) взявся за вивчення такої крутої штукенції, як “Linux kernel development”. Я вихований девізом “I’ve learned. I’ll share”, тому спробую ділитись новою для мене інформацією з вами.

На жаль, у мене немає ані часу, ані бажання розжовувати кожну тему, до того ж, теоретичного матеріалу, як мені здається, предостатньо. У мене найбільші проблеми виникають при пошуку достатньо простих для розуміння прикладів. На них я і спробую зосередити свою увагу…

Read the rest of this entry »