લિનુસ ટોરવાલ્ડ્સનું અનુકરણ: શરૂઆતથી તમારી પોતાની operatingપરેટિંગ સિસ્ટમ બનાવો (VII)

વિશેની અન્ય પોસ્ટમાં આપનું સ્વાગત છે આપણી operatingપરેટિંગ સિસ્ટમ કેવી રીતે બનાવવી (શ્રેણીના પાછલા લેખો: 1, 2, 3, 4, 5 y 6). છેલ્લી પોસ્ટથી લાંબો સમય થયો છે, મુખ્યત્વે ભૂલના કારણે જે આજે આપણી પાસે છે તે મળી. આપણે જોઈશું કેવી રીતે x86 આર્કિટેક્ચરો પર ઘડિયાળને હેન્ડલ કરવું.

પહેલાં અમે સામાન્ય રીતે IRQs ને સક્રિય કર્યું હતું, પરંતુ ત્યાં એક નાની સમસ્યા હતી કારણ કે અમે તેમને યોગ્ય રીતે સક્રિય કર્યા નથી અને અમે વધારાનો ડેટા પસાર કર્યો છે. છેવટે અમે તેને ઠીક કરીએ છીએ કાર્લોસોર્ટા અને હું કેવી રીતે ચાલુ રાખવું તે અંગે ટિપ્પણી કરવાનું ચાલુ રાખી શકું છું.

ઠીક છે, ઘડિયાળ એ આઈઆરક્યુ છે, ખાસ કરીને પ્રથમ. તેને ગોઠવવા માટે, અમે ફંકશનનો ઉપયોગ કરીશું જેની ઉપર IRQs, ND_IRQ_InstallHandler ને સામાન્ય રીતે ઇન્સ્ટોલ કરવા માટે આપણે ઉપર નિર્ધારિત કર્યું છે.

પૂર્ણાંક ND_TIMER_TICKS = 0; રદબાતલ એનડી :: ટાઈમર :: તબક્કો (પૂર્ણાંક હર્ટ્ઝ) {પૂર્ણાંક વિભાજક = 1193180 / હર્ટ્ઝ; એનડી :: બંદરો :: આઉટપુટબી (0x43,0x36); એનડી :: બંદરો :: આઉટપુટબી (0x40, વિભાજક અને 0xFF); એનડી :: બંદરો :: આઉટપુટબી (0x40, વિભાજક >> 8); } રદબાતલ એનડી :: ટાઈમર :: પ્રતીક્ષા કરો (પૂર્ણાંક બગાઇ) {સહી ન કરેલા લાંબા એટિક; એટિક્સ = એનડી_TIMER_TICKS + બગાઇ; જ્યારે (એનડી. એનડી :: સ્ક્રીન :: પુટસ્ટ્રિંગ ("et n સેટઅપ ટાઈમર ..."); ND_IRQ_InstallHandler (0, & ND_Timer_Handler); એનડી :: સ્ક્રીન :: સેટ કલર (ND_SIDE_FOREGROUND, ND_COLOR_GREEN); એનડી :: સ્ક્રીન :: પુટસ્ટ્રિંગ ("પૂર્ણ"); tern બાહ્ય "સી" રદબાતલ ND_Timer_Handler (સ્ટ્રક્ટ regs * r) {ND_TIMER_TICKS ++; જો (ND_TIMER_TICKS% 18 == 0) {// એનડી :: સ્ક્રીન :: સેટ કલર (ND_SIDE_FOREGROUND, ND_COLOR_BROWN); // એનડી :: સ્ક્રીન :: પુટસ્ટ્રિંગ ("second n વધુ એક સેકન્ડ"); અમે એક રિફ્રેશ સ્ક્રીન કરવું જોઈએ}

કોડ નીચે પ્રમાણે ચાલે છે: પ્રારંભિક સિસ્ટમ કોલ્સ એનડી :: ટાઈમર :: સેટઅપ, જે બોલાવે છે ND_IRQ_InstallHandler પ્રથમ સ્થિતિમાં દાખલ કરવા માટે, આઇઆરક્યૂ 0, જ્યારે ક occursલબ functionક ફંકશન થાય છે, તે છે એનડી_ટાઇમર_હોલ્ડર કે વધે છે બગાઇ. જેમકે આપણે ઘડિયાળની ગતિ 18 હર્ટ્ઝ પર સેટ કરી છે, તેમ આપણે પછી જોશું, જો આપણે તેને 18 વડે વહેંચીયે અને પૂર્ણાંક આપીએ, તો એક સેકંડ પસાર થઈ ગયું હોત.

કાર્ય એનડી :: ટાઈમર :: તબક્કો તે અમને ની ગતિને સમાયોજિત કરવામાં મદદ કરે છે ટાઇમર, તે ઉડાઉ નંબર 1.19 મેગાહર્ટઝ છે જે સામાન્ય મૂલ્ય છે. ઠીક છે, જો આપણે ગતિને બદલવા માંગતા હો, તો આ ફંક્શન કહેવા જોઈએ ટાઇમર, ડિફ defaultલ્ટ રૂપે તે 18,22 હર્ટ્ઝ પર જાય છે, એક વિશિષ્ટ મૂલ્ય કે જેણે કોઈએ અંદર નક્કી કર્યું હોવું જોઈએ IBM અને તે આજ સુધી બાકી છે.

કાર્ય એનડી :: ટાઈમર :: પ્રતીક્ષા કરો તે ખૂબ સરળ છે, ફક્ત એક લૂપ સાથે રાહ જુઓ જ્યારે ત્યાં સુધી બગાઇ ચાલુ રાખવા માટે જરૂરી.

છબીમાં આપણે જોઈ શકીએ છીએ કે જો આપણે ND_Timer_Handler ની અંદરના કોડને અસામાન્ય બનાવ્યા છે તો આપણે આ મેળવીએ છીએ:

નેક્સ્ટડિવલમાં સેકન્ડ્સ

આગામી પ્રકરણમાં આપણે કીબોર્ડ ઇનપુટ કેવી રીતે વાંચવું અને થોડું બનાવવું તે જોઈશું શેલ અમારી સિસ્ટમ સાથે સંપર્ક કરવા. હંમેશની જેમ, કોડ માં ઉપલબ્ધ છે GitHub લાયસન્સ હેઠળ GNU GPL v2.


14 ટિપ્પણીઓ, તમારી છોડી દો

તમારી ટિપ્પણી મૂકો

તમારું ઇમેઇલ સરનામું પ્રકાશિત કરવામાં આવશે નહીં. આવશ્યક ક્ષેત્રો સાથે ચિહ્નિત થયેલ છે *

*

*

  1. ડેટા માટે જવાબદાર: મિગ્યુએલ gelંજેલ ગેટóન
  2. ડેટાનો હેતુ: નિયંત્રણ સ્પામ, ટિપ્પણી સંચાલન.
  3. કાયદો: તમારી સંમતિ
  4. ડેટાની વાતચીત: કાયદાકીય જવાબદારી સિવાય ડેટા તૃતીય પક્ષને આપવામાં આવશે નહીં.
  5. ડેટા સ્ટોરેજ: cસેન્ટસ નેટવર્ક્સ (ઇયુ) દ્વારા હોસ્ટ કરેલો ડેટાબેઝ
  6. અધિકાર: કોઈપણ સમયે તમે તમારી માહિતીને મર્યાદિત, પુન recoverપ્રાપ્ત અને કા deleteી શકો છો.

  1.   નોહ જણાવ્યું હતું કે

    ટ્યુટોરિયલ્સની ખૂબ જ રસપ્રદ શ્રેણી, વ્યક્તિગત રૂપે મેં શરૂઆતથી લિનક્સ ડિસ્ટ્રિબ્યુશન બનાવવા વિશે વધુ જોયું ન હતું, અને સ્પેનિશમાં પણ ઓછા અને તેથી સંપૂર્ણ. મને લાગે છે કે તમે આમાંથી ઘણું શીખી શકો છો અને મારી પાસે સમય મળતાંની સાથે જ હું આ ટ્યુટોરિયલ્સ કરવામાં સમર્થ થવાની આશા રાખું છું.
    હું ફક્ત એટલું જ પૂછું છું કે તમે નિરાશ ન થાઓ અને ટ્યુટોરિયલ સમાપ્ત ન કરો, કેમ કે મને ઘણા સારા ટ્યુટોરિયલ્સ મળ્યા છે જે ક્યારેય સમાપ્ત થતા નથી.
    શુભેચ્છાઓ અને આભાર :).

    1.    રોડર જણાવ્યું હતું કે

      તે લીનક્સ વિતરણ નથી, તે કર્નલ છે a.

    2.    દેશીકોડર જણાવ્યું હતું કે

      તું ખોટો છે. લિનક્સ ડિસ્ટ્રો બનાવવાનું કંઈપણ પ્રોગ્રામિંગ સૂચિત કરતું નથી, ઉદાહરણ તરીકે, શરૂઆતથી લિનક્સમાં તમે પ્રોગ્રામ નથી કરતા, તમે જે કરો છો તે ઇન્સ્ટોલ (કમ્પાઇલિંગ પર આધારિત) છે, મૂળ પેકેજો કે જે ડિસ્ટ્રો બનાવે છે. આ ખૂબ જ અલગ છે. તે તમારી પોતાની operatingપરેટિંગ સિસ્ટમ બનાવી રહ્યું છે. તેને લિનક્સ સાથે કરવાનું કંઈ નથી. તેના દિવસોમાં ટvalરવલ્ડે મિનિક્સ દ્વારા પ્રેરિત તે જ કર્યું હતું, અને ટોરવાલ્ડ્સ અને એન્ડ્રૂ એસ વચ્ચે તે ગરમ અને લોકપ્રિય ચર્ચા સાથે. મોનોલિથિક કર્નલ વિ માઇક્રોકર્નલ પર ટેનબumમ.

      શુભેચ્છાઓ!

  2.   ઇલુકકી જણાવ્યું હતું કે

    આભાર ચે. હજી સુધી મેં તમારી પોસ્ટ પર વધુ ધ્યાન આપ્યું નથી પરંતુ હું એક પ્રોજેક્ટમાં છું તેથી હું તેમની પર એક નજર નાખીશ.
    શુભેચ્છાઓ.

  3.   રોડર જણાવ્યું હતું કે

    તે ઉલ્લેખનીય છે કે અન્ય ભાષાઓનો ઉપયોગ કરી શકાય છે, જેમ કે ઉદ્દેશ-સી (++), સી ++, ડી અથવા રસ્ટ.

    1.    એડ્રિયનઆરોયોસ્ટ્રીટ જણાવ્યું હતું કે

      આ એક સી ++ માં છે, સીમાં નહીં. જો કે, ઘણા સી ++ operaપરેટરોને પુસ્તકાલયનું સમર્થન જરૂરી છે, જેમ કે નવા અને કા bacી નાખનારા torsપરેટર્સ. રસ્ટમાં operatingપરેટિંગ સિસ્ટમ બનાવવી તે ખૂબ જ રસપ્રદ રહેશે. રસ્ટ પર operatingપરેટિંગ સિસ્ટમોને સમર્પિત ખરેખર એક આઈઆરસી ચેનલ છે (irc.mozilla.net પર # રસ્ટ-ઓસદેવ) કોઈપણ કે જેણે મશીન કોડનું કમ્પાઇલિંગ કર્યું તે ખરેખર તે યોગ્ય છે, જાવા સહિત જો આપણે જી.સી.જે.

      1.    રોડર જણાવ્યું હતું કે

        હા, ખરેખર, રસ્ટ operatingપરેટિંગ સિસ્ટમ્સ માટે ખૂબ જ રસપ્રદ ભાષા છે, કારણ કે સી અથવા સી ++ કરતા શીખવું માત્ર એટલું જ સરળ નથી (તે હજી પણ સતત ફેરફારો સાથે ચાલુ રહે છે, પરંતુ તે વધુ સરળ છે), પરંતુ તે વધુ સુરક્ષિત છે.

  4.   રોડર જણાવ્યું હતું કે

    70 ના દાયકામાં, ઓએસ વિના, સીધા હાર્ડવેર પર પ્રોગ્રામ કરવાનું એકદમ સામાન્ય હતું.

  5.   ક્રિસ્ટોફર જણાવ્યું હતું કે

    ઉત્તમ ... હવે મારે ફક્ત સમજવાની જરૂર છે: 3 ...

  6.   એમએમએમ જણાવ્યું હતું કે

    હાય. આ લેખ માટે ખૂબ ખૂબ આભાર. પરંતુ, જો મારી પાસે પ્રોગ્રામિંગ જ્ knowledgeાન નથી, તો મને નથી લાગતું કે મારે તે કરવું જોઈએ, બરાબર? મારો મતલબ, જો તે સારું ન હોત, અને હવે હું કોપી અને પેસ્ટ શું કરી શકું છું? »... અફસોસની વાત છે, હું હંમેશાં કેવી રીતે પ્રોગ્રામ કરવું અને કંઇ નહીં તે જાણવા માટે ખૂબ ઇચ્છતો હતો, હું ગધેડોનો વધુ છું!

    1.    દેશીકોડર જણાવ્યું હતું કે

      પોતાને દોષ ન આપો, તમે કોઈ ગધેડા નથી. શરૂઆતમાં, બધા પ્રોગ્રામરો કર્નલ કેવી રીતે લખવું તે જાણતા નથી, તે ખૂબ જ સરળ કાર્ય છે, અને વ્યવહારમાં તે મોટું છે. ઉદાહરણ તરીકે, અહીં લેખક કીબોર્ડ અને સ્ક્રીન માટે સામાન્ય ડ્રાઇવરો બનાવે છે, સ્ક્રીન એરેમાં ચાલાકી લાવે છે, જે એક એવી પદ્ધતિ છે જેનો આજે કોઈ ઉપયોગ થતો નથી. લિનક્સમાં ટીટીટી આજે ખૂબ જ જટિલ છે, અને x86 આર્કિટેક્ચર તેના નિકાલ પર સ્ક્રીન એરે ધરાવતાં પર આધારિત નથી. આ ઉપરાંત, સીનો મોટાભાગનો આર્કિટેક્ચર પર આધાર રાખે છે, જ્યારે એસેમ્બલરમાં આર્કિટેક્ચર કોડ બનાવવાનો આદર્શ છે અને સી કોડ કોઈપણ પ્રોસેસર પર કાર્ય કરે છે. તેમ છતાં, હું લેખકથી હટતો નથી, કારણ કે કર્નલ એ લાક્ષણિકતાઓને પ્રાપ્ત કરે છે કે જેને આપણે આજે લિનક્સ કર્નલમાં સામાન્ય માનીએ છીએ, ઉદાહરણ તરીકે, એક સરળ કાર્ય નથી, અને ખાતરીપૂર્વક ખાતરી કરો કે એક પણ વ્યક્તિ તે કરવામાં અસમર્થ છે. કોઈ વસ્તુ માટે લિનોક્સ, જીસીસી, ગ્લિબીસી, વગેરે જેવા મોટા પ્રોજેક્ટ્સ એક જ વ્યક્તિ દ્વારા બનાવવામાં આવતાં નથી, પરંતુ ઘણા સહયોગીઓ છે.

      ઉપરાંત, જો તમે પ્રોગ્રામિંગ શરૂ કરવા માંગતા હો, તો તમારી પાસે વેબ પર ઘણાં માર્ગદર્શિકાઓ છે, તેમ છતાં તમારે સાવચેત રહેવું જોઈએ, અને સારા માર્ગદર્શિકાઓ પસંદ કરવી પડશે. મેં મારા માથાથી અને પાણી વિના પૂલમાં લિનક્સ જમ્પિંગમાં પ્રોગ્રામિંગ શરૂ કર્યું (એટલે ​​કે, પ્રિય સી ભાષા સાથે), જોકે હવે મારી પાસે અજગરની કેટલીક મૂળ કલ્પનાઓ છે (જે ખૂબ સારી ભાષા પણ છે). કેટલાક સી પુસ્તકો છે જેમાં તમે પૃષ્ઠ 6 પર જેટલું માથાનો દુખાવો મેળવો છો તે છોડી દે છે, પરંતુ પુસ્તકો કરતાં આ વસ્તુઓ અનુભવ દ્વારા પ્રાપ્ત કરવામાં આવે છે. તે OSI નેટવર્ક મોડેલની જેમ થાય છે. નવા આવનાર માટે ઓસી મોડેલ વિશેના દસ્તાવેજોને સમજવું એકદમ અશક્ય છે, પરંતુ જો તમને નેટવર્ક સ્તરોની સારી સમજણવાળી કોઈ સાઇટ મળે, તો તમે ઝડપથી આર.એફ.સી. જેવા તકનીકી દસ્તાવેજો સાથે વ્યવહાર કરવાના ખ્યાલો મેળવી શકો છો.

      ટૂંકમાં, ત્યાં સારી વેબસાઇટ્સ અને માર્ગદર્શિકાઓ છે, તે ત્યાં જવા અને સારી સામગ્રી શોધવાની બાબત છે.

      સાદર

  7.   ફ્રી_ડોમ જણાવ્યું હતું કે

    હેલો, "ભૂલ: કોઈ મલ્ટિબૂટ હેડર મળ્યું નહીં" હલ કરવા માટે ખૂબ જ પ્રયાસ કર્યા પછી. અને «ભૂલ તમારે પહેલા કર્નલને લોડ કરવાની જરૂર છે since, કારણ કે મારા જેવા કેટલાક લોકોની જેમ પ્રથમ લેખની સમસ્યાનું સમાધાન હું ક્યાંય શોધી શક્યું નહીં ... અહીં આ ઉપાય છે, જો તે કોઈના માટે કામ કરે તો ...

    મને ખબર નથી કે ભૂલના કારણો માટેની મારી સિદ્ધાંત સાચી છે કે નહીં, તેમછતાં પણ, પ્રશ્ન એ છે કે 32-બીટ operatingપરેટિંગ સિસ્ટમમાં ફાઇલોને કમ્પાઇલ કરતી વખતે, તે ભૂલ પેદા કરતી નથી, પરંતુ મારી પાસે 64-બીટ ઓપરેટિંગ છે સિસ્ટમ (Gnu / Linux ડેબિયન 7), અને જ્યારે કમ્પાઇલિંગ અને પરીક્ષણ કરતી વખતે મને "કોઈ મલ્ટિબૂટ હેડર મળ્યું નથી" ની ભૂલ મળી, અને ત્યાં એક શંકા છે, તો મારા મતે ભૂલ theપરેટિંગ સિસ્ટમના વાતાવરણ અથવા આર્કિટેક્ચરને કારણે છે. જેમાં આપણે અમારી ફાઇલોનું સંકલન કરીએ છીએ ... અને મેં જે કર્યું તે સારી રીતે મારી ફાઇલોનું કમ્પાઇલ કરવાનું છે, 32-બીટ વાતાવરણ અથવા આર્કિટેક્ચરનો ઉલ્લેખ કરીને ..
    * sudo as -o kernel.o -c kernel.asm -32
    * સુડો જીસીસી -ઓ નેક્સ્ટ કેર્નલ_માઇન.ઓ -સી નેક્સ્ટ કેર્નલ_માઇન.સી.-નોસ્ટ્ડલિબ -ફ પી.પી.આઈ.સી. -ફ્રેસ્ટ સ્ટેન્ડિંગ -m32
    * સુડો જીસીસી-એમ 32 -ઓ પ્રારંભ.એલએફ કર્નલ.ઓ નેક્સ્ટ કેર્નલ_માઇન.ઓ -ટલિંક.લ્ડ-નોસ્ટ્ડલિબ -એફપીઆઈસી -ફ્રેસ્ટ સ્ટેન્ડિંગ
    આશ્ચર્યજનક બાબત એ છે કે મને કેટલીક શંકાઓ છે હાહાહા, તો પછી અમે stepપરેટિંગ સિસ્ટમ કે જે આપણે સ્ટેપ બાય સ્ટેપ બનાવી રહ્યા છીએ તે એક x86 આર્કિટેક્ચર માટે છે અથવા હું ખોટો અજાજ છું….

    PS: કોઈએ મને શંકા કરવામાં મદદ કરવા માટે, અને કેટલીક જોડણી ભૂલો અથવા મારી ખરાબ અભિવ્યક્તિને બહાનું આપી, અને સારી રીતે હું સંપૂર્ણ નથી તેથી not પરફેક્શનની કિંમત છે…. અને સૌથી અગત્યનું, 32-બીટ operatingપરેટિંગ સિસ્ટમનું અનુકરણ, પવિત્ર સમાધાન … .હાહાહા

    1.    માર્ટિન વિલાલ્બા જણાવ્યું હતું કે

      પ્રતિભાશાળી ! હું ખરેખર આ ટ્યુટોરીયલ કરવા માંગતો હતો અને હું શરૂઆતમાં તે ભૂલથી હેહા થઈ ગયો

  8.   ઓસ્કાર જણાવ્યું હતું કે

    અભિનંદન, તે એક ઉત્તમ યોગદાન છે. હવેથી હું શેર કરું છું કે મારા દ્વારા અને અન્ય લોકો દ્વારા તમારા સારા કાર્યને વિસ્તૃત કરવામાં આવશે;

    સાદર