কম্পিউটারগুলি কীভাবে কাঁচা, নিম্ন-স্তরের পাঠ্য এবং গ্রাফিক্স প্রদর্শন করে


46

কম্পিউটারের প্রতি আমার ক্রমবর্ধমান আগ্রহ আমাকে আরও গভীর প্রশ্ন জিজ্ঞাসা করছে, যা আমাদের আর জিজ্ঞাসা করতে হবে বলে মনে হয় না। আমাদের কম্পিউটারগুলি, বুটে, যতদূর আমি এটি বুঝতে পারি, পাঠ্য মোডে রয়েছে , যেখানে কোনও অক্ষর 0x10যখন সফ্টওয়্যারটি বাধাপ্রাপ্ত করে ব্যবহার করে প্রদর্শিত হতে পারে AH=0x0e। কম্পিউটার বুট হচ্ছে তা নির্বিশেষে আমরা সবাই বিখ্যাত বুটিং ফন্টটি দেখেছি যা সর্বদা একই দেখায়।

সুতরাং, পৃথিবীতে কম্পিউটারগুলি কীভাবে সর্বনিম্ন স্তরে গ্রাফিক্সকে ওএসের নীচে বলে? এবং এছাড়াও, অবশ্যই গ্রাফিকগুলি একবারে সফ্টওয়্যার বিঘ্ন ব্যবহার করে একটি পিক্সেল আউটপুট করা হয় না, কারণ এটি খুব ধীর লাগে?

এমন কোনও মান আছে যা শিখুন, বহুভুজ, ফন্ট ইত্যাদির মৌলিক আউটপুটিংকে সংজ্ঞায়িত করে (উদাহরণের জন্য ওপেনলির নীচে, কোন ওপেনএল ব্যবহার করতে পারে)? আমাকে জিজ্ঞাসা করার কারণটি হল কেন অফিসিয়াল ড্রাইভার ইনস্টল না করেই ওএস প্রায়শই ভাল হতে পারে; তারা কিভাবে সেটি করে?

আমার অনুমানগুলি ভুল হলে ক্ষমা চাই। আমি এই বিষয়গুলির বিস্তারিত জানার জন্য কৃতজ্ঞ থাকব!


এটি সমস্ত কম্পিউটার নয়, এটি ডিসপ্লে হার্ডওয়ারের উপর নির্ভর করে। আইবিএম বিবর্তন লাইনের উপর ভিত্তি করে পিসিগুলিতে মূলত স্রেফ পাঠ্য মোড ছিল, তারপরে বিভিন্ন গ্রাফিক্স মোড যুক্ত করা হয়েছিল। আমাদের এখনও সেই উত্তরাধিকার আছে। পুরানো কম্পিউটারগুলিতে প্রায়শই কেবল পাঠ্য মোড থাকে। অন্যান্য কম্পিউটারগুলিতে অ্যামিগা এবং মূল ম্যাকিনটোসগুলির মতো কেবল গ্রাফিক্স মোড ছিল।
হিপ্পিট্রেইল

উত্তর:


25

এটি (আংশিকভাবে) বিআইওএসের ভূমিকা।

কম্পিউটারের বেসিক ইনপুট আউটপুট সিস্টেমটি প্রকৃত কম্পিউটারের মধ্যে এ জাতীয় পার্থক্য থাকা সত্ত্বেও অপারেটিং সিস্টেমগুলিতে একটি সাধারণ ইন্টারফেস সরবরাহ করার জন্য দায়বদ্ধ।

এটি বলেছিল, গ্রাফিক্সের জন্য বিশেষভাবে, স্ক্রিনে আঁকার বিভিন্ন উপায় রয়েছে। এখানে টিটিওয়াই কমান্ড রয়েছে যা আপনি বিআইওএসে প্রেরণ করতে পারেন, তবে এটি কেবল আসল মোডে। আপনি যদি সুরক্ষিত মোডে কিছু আঁকতে চান তবে জিনিসগুলি আঁকতে আপনার ভিজিএ ব্যবহার করতে হবে। আমি ওএসডিভের চেয়ে এটি আরও ভাল ব্যাখ্যা করতে পারি না, সুতরাং আরও তথ্যের জন্য এখানে দেখুন - তবে মূলত, আপনি 0xB8000পর্দায় জিনিসগুলি আঁকতে ঠিকানায় শুরু করে মেমোরিতে (ভিডিও মেমরি মেমরি-ম্যাপযুক্ত) লিখতে পারেন ।

আপনার যদি ভিজিএর তুলনায় উচ্চতর রেজোলিউশন প্রয়োজন হয় তবে আপনার ভেসা বায়োস এক্সটেনশনগুলি ব্যবহার করতে হবে; আমি এটির সাথে পরিচিত নই, তবে আরও তথ্যের জন্য GRUB উত্স কোডটি দেখার চেষ্টা করুন।

কিছু দরকারী তথ্যসূত্র:


আপনি যদি ডি এর সাথে পরিচিত হন - আমি কিছুক্ষণ আগে একটি ছোট বুট লোডার লিখেছিলাম যা স্ক্রিনে লিখতে সক্ষম হয়েছিল (কেবল পাঠ্য)। আপনি যদি আগ্রহী হন তবে কোডটি এখানে:

align(2) struct Cell { char ch; ubyte flags = 0x07; }

@property Cell[] vram()
{ return (cast(Cell*)0xB8000)[0 .. CONSOLE_WIDTH * CONSOLE_HEIGHT]; }

void putc(char c)
{
    if (isBochs) { _outp(0xE9, c); }  // Output to the Bochs terminal!

    bool isNewline = c == '\n';
    while (cursorPos + (isNewline ? 0 : 1) > vram.length)
    {
        for (short column = CONSOLE_WIDTH - 1; column >= 0; column--)
        {
            foreach (row; 0 .. CONSOLE_HEIGHT - 1)
            {
                uint cell = column + cast(uint)row * CONSOLE_WIDTH;
                vram[cell] = vram[cell + CONSOLE_WIDTH];
            }
            vram[column + (CONSOLE_HEIGHT - 1) * CONSOLE_WIDTH].ch = ' ';
        }
        cursorPos = cast(ushort)(cursorPos - CONSOLE_WIDTH);
    }
    if (isNewline)
        cursorPos = cast(ushort)
            ((1 + cursorPos / CONSOLE_WIDTH) * CONSOLE_WIDTH);
    else vram[cursorPos++].ch = c;
}

void putc(char c, ubyte attrib) { vram[cursorPos] = Cell(c, attrib); }

void memdump(void* pMem, size_t length)
{
    foreach (i; 0 .. length)
        putc((cast(char*)pMem)[i]);
}

void clear(char clear_to = '\0', ubyte attrib = DEFAULT_ATTRIBUTES)
{
    foreach (pos; 0 .. vram.length)
        vram[pos] = Cell(clear_to, attrib);
    cursorPos = 0;
}

@property ushort cursorPos()
{
    ushort result = 0;
    _outp(0x3D4, 14);
    result += _inp(0x3D5) << 8;
    _outp(0x3D4, 15);
    result += _inp(0x3D5);
    return result;
}

@property void cursorPos(ushort position)
{
    _outp(0x3D4, 14);
    _outp(0x3D5, (position >> 8) & 0xFF);
    _outp(0x3D4, 15);
    _outp(0x3D5, position & 0xFF);
}

উত্তরের জন্য ধন্যবাদ. GRUB সোর্স কোড কেন? আমি জানতাম না GRUB নিজেই গ্রাফিক্সের সাথে জড়িত।
ডডি

2
@ স্প্যানিশ গ্রুব 2 ওএস নির্বাচন মেনুতে ব্যাকগ্রাউন্ড হিসাবে কোনও চিত্র প্রদর্শিত সহ কিছু আকর্ষণীয় কাজ করতে পারে। গ্রাব সম্পর্কে নির্দিষ্ট নয়।
ইজকাটা

@ স্প্যানিশ: আমি নিশ্চিত নই যে এটি গ্রুব বা GRUB2 (আমি "GRUB" সাধারণভাবে ব্যবহার করেছি), তবে তারা অবশ্যই আমার মনিটরে একটি স্থানীয় 1600x900 রেজোলিউশনে পরিবর্তন করতে পারে, তাই আমি নিশ্চিত যে তারা আপনাকে দেখতে পারে এমন জিনিস থাকবে। (আমি কিছুক্ষণ আগে তাদের মধ্যে সন্ধান করেছি এবং আমি মনে করি তারা সহায়ক হয়েছিল, তবে আমি কিছুক্ষণ হয়ে গেলাম তাই কোন ফাইল (গুলি) আপনার অবশ্যই দেখা উচিত তা আমি মনে করি না))
মেহেরদাবাদ

শব্দটির memory-mappedঅর্থ কি র‌্যামে একটি "বাফার" অঞ্চল রয়েছে যেখানে সিপিইউ (বা অন্য কোনও ডিএমএ ইউনিট আছে?) গ্রাফিক্স কার্ড এবং যে প্রোগ্রামটি প্রদর্শনটিতে লেখার চেষ্টা করে উভয়ের পক্ষেই পড়তে এবং লিখতে পারে?
n611x007

1
@ নেক্সা: ভাল প্রশ্ন ... সাধারণত, মেমরি ম্যাপ করা হার্ডওয়্যার মানে মেমরির এমন একটি ঠিকানা রয়েছে যা আসলে র্যামের সাথে সঙ্গতি রাখে না। বরং এটি পড়া বা লেখা কিছু হার্ডওয়্যারে কিছু ক্রিয়া সম্পাদনের সাথে সম্পর্কিত। তাই বলা হয়, আমি নিশ্চিত আপনি কীভাবে প্রকৃত RAM ও হার্ডওয়্যার মেমরি একটি ব্লক তোলে মধ্যে পার্থক্য করতে পারে না বর্ণন র্যাম মত ... এটা হতে পারে যে এটা এই ক্ষেত্রে প্রকৃত র্যাম, কিন্তু আমার ছাপ যে সার্চ হয়েছিল লিখেছেন বাধাপ্রাপ্ত হয় হার্ডওয়্যার দ্বারা
মেহরদাদ

25

আইবিএম পিসি এবং এর ক্লোনগুলির প্রথম দিনগুলি থেকে, ডিসপ্লে অ্যাডাপ্টারের হার্ডওয়্যারটি খুব সাধারণ ছিল: প্রতিটি কক্ষের জন্য দুটি বাইটের মেমরির সাথে মেমরির একটি ছোট ব্লক অক্ষর কোষের গ্রিডকে (স্ট্যান্ডার্ড মোডে 80x25 অক্ষর) উত্সর্গীকৃত ছিল memory । একটি বাইট চরিত্রটি নির্বাচন করেছে এবং অন্যটি তার "বৈশিষ্ট্যগুলি" বেছে নিয়েছে - রঙের অ্যাডাপ্টারের জন্য অগ্রভাগ এবং পটভূমির রঙ প্লাস ব্লিঙ্ক নিয়ন্ত্রণ; একরঙা অ্যাডাপ্টারের জন্য গা bold়, আন্ডারলাইন করা, ঝলকানো বা বিপরীত ভিডিও। হার্ডওয়্যার অক্ষর মেমরির বিষয়বস্তু অনুযায়ী অক্ষর আকারের একটি রম টেবিল থেকে পিক্সেল সন্ধান করেছে।

হার্ডওয়্যার স্বতন্ত্রতার একটি নির্দিষ্ট ডিগ্রী সরবরাহ করার জন্য, চরিত্রের মানচিত্রে BIOS ইন্টারফেসের পর্দায় একটি একক অক্ষর ঘর সেট করার জন্য একটি সফ্টওয়্যার বিঘ্নিত হওয়া প্রয়োজন। এটি ধীর এবং অদক্ষ ছিল। তবে, অক্ষর মেমরিটি সরাসরি সিপিইউ দ্বারাও সম্বোধনযোগ্য ছিল, তাই আপনি যদি জানতেন যে হার্ডওয়্যারটি উপস্থিত রয়েছে, আপনি তার পরিবর্তে সরাসরি মেমরিতে লিখতে পারেন। যে কোনও উপায়ে, একবার সেট হয়ে গেলে, চরিত্রটি পরিবর্তন না হওয়া পর্যন্ত পর্দায় থাকবে এবং আপনার সাথে কাজ করার জন্য মোট চরিত্রের মেমরিটি ছিল 4000 বাইট - একক 32x32 পূর্ণ রঙের টেক্সচারের আকার সম্পর্কে!

গ্রাফিক্স মোডে, পরিস্থিতি একই রকম ছিল; স্ক্রিনের প্রতিটি পিক্সেল মেমরির একটি নির্দিষ্ট অবস্থানের সাথে সম্পর্কিত এবং সেখানে একটি বায়োস সেট-পিক্সেল ইন্টারফেস ছিল তবে উচ্চ পারফরম্যান্সের কাজটি সরাসরি মেমরিতে লেখার প্রয়োজন। পরবর্তীতে ভেসার মতো মানকগুলি হার্ডওয়্যারের মেমরি লেআউটটি শিখতে সিস্টেমটিকে কয়েকটি ধীর BIOS- ভিত্তিক জিজ্ঞাসা করতে দেয়, তারপরে মেমরির সাথে সরাসরি কাজ করে। কোনও ওএস কোনও বিশেষজ্ঞ ড্রাইভার ছাড়া গ্রাফিক্স প্রদর্শন করতে পারে, যদিও আধুনিক ওএসগুলিতে প্রতিটি বড় জিপিইউ প্রস্তুতকারকের হার্ডওয়ারের জন্য বেসিক ড্রাইভার অন্তর্ভুক্ত থাকে। এমনকি নতুন এনভিডিয়া কার্ডটি বিভিন্ন ধরণের পিছনের সামঞ্জস্যতা মোডগুলিকে সমর্থন করবে, সম্ভবত সমস্তভাবে আইবিএম সিজিএ-তে ফিরে আসে।

3 ডি গ্রাফিক্স এবং 2 ডি এর মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য হ'ল 2 ডি তে সাধারণত আপনার প্রতিটি ফ্রেম পুরো পর্দা পুনরায় আঁকার প্রয়োজন হয় না। 3 ডি-তে, যদি ক্যামেরাটি এমনকি সামান্য বিট করে, স্ক্রিনের প্রতিটি পিক্সেল পরিবর্তিত হতে পারে; 2 ডি-তে, আপনি যদি স্ক্রলিং না করে থাকেন তবে বেশিরভাগ স্ক্রিনটি ফ্রেম-টু ফ্রেমে অপরিবর্তিত থাকবে এবং আপনি যদি স্ক্রলিং করছেন তবে আপনি পুরো দৃশ্যের পুনরায় সংযোজনের পরিবর্তে দ্রুত মেমরি-থেকে-মেমরি অনুলিপি করতে পারেন। সুতরাং এটি প্রতি পিক্সেলের জন্য প্রতিটি ফ্রেমের জন্য আইএনটি 10 ​​এইচ চালানোর মতো কিছুই নয়।

সূত্র: আমি সত্যই বুড়ো


অনেক তথ্যপূর্ণ, ধন্যবাদ। আমি যদি একের বেশি গ্রহণ করতে পারি!
ডডি

8

বুট করার সময় সিস্টেম BIOS ভিডিও অ্যাডাপ্টারের সন্ধান করে। বিশেষত, এটি বিআইওএস প্রোগ্রামে নির্মিত ভিডিও অ্যাডাপ্টারের সন্ধান করে এবং এটি চালায়। এই BIOS মেমরির সাধারণত C000h অবস্থানে পাওয়া যায়। সিস্টেম BIOS ভিডিও BIOS চালায় যা ভিডিও অ্যাডাপ্টারের সূচনা করে।

কোন স্তর বা ভিডিও / গ্রাফিকের মোডগুলি কোনও ওএস বা ড্রাইভার ছাড়াই দেশীয়ভাবে প্রদর্শন করতে পারে, প্রাথমিকভাবে ভিডিও বিআইওএসের উপর নির্ভরশীল।

উত্স / আরও তথ্য এখানে - "সিস্টেম বুট সিকোয়েন্স"


6

আমাদের কম্পিউটারগুলি, বুট হিসাবে, যতদূর আমি এটি বুঝতে পারি, পাঠ্য মোডে রয়েছে, যেখানে এএএচ = 0x0e যখন 0x10 সফ্টওয়্যার ব্যবহার করে একটি অক্ষর প্রদর্শিত হয়

আপনি লিগ্যাসি বিআইওএস ফাংশন সম্পর্কে কথা বলছেন। আসলে আপনার এ জাতীয় ফাংশন ব্যবহার করার দরকার নেই। আপনি এগুলি সরাসরি ভিডিও মেমোরিতে লিখুন।

ওএসের নীচে কম্পিউটারের আউটপুট গ্রাফিকগুলি কীভাবে পৃথিবীতে আউটপুট দেয়?

এটি কীভাবে ওএস পরিচালনা করে তা জোরালোভাবে করতে হবে। যাইহোক, হার্ডওয়্যার পর্যায়ে অপারেশনটি একই রকম: ভিডিও কার্ডের একটি ভিডিও র‌্যাম রয়েছে, যা পরের চিত্রটি স্ক্রিনে আঁকতে সংরক্ষণ করে (সরলীকরণ করে)। আপনি ভাবতে পারেন যে প্রতিটি ঠিকানা একটি বাইট যা একটি পিক্সেল উপস্থাপন করে (আসলে সাধারণত আপনার পিক্সেল প্রতি একাধিক বাইট প্রয়োজন)। তারপরে ভিডিও কন্ট্রোলার মনিটর বুঝতে পারে এমন একটি সিগন্যালে এটি অনুবাদ করার যত্ন নেয়।

এমন কোনও মান আছে যা শিখুন, বহুভুজ, ফন্ট ইত্যাদির মৌলিক আউটপুটিংকে সংজ্ঞায়িত করে (উদাহরণের জন্য ওপেনলির নীচে, কোন ওপেনএল ব্যবহার করতে পারে)?

আফাইক, না। যৌক্তিক গ্রাফিক উপস্থাপনা সম্পর্কে কোনও মান নেই।

আমাকে জিজ্ঞাসা করার কারণটি হল কেন অফিসিয়াল ড্রাইভার ইনস্টল না করেই ওএস প্রায়শই ভাল হতে পারে; তারা কিভাবে সেটি করে?

কারণ এতে ড্রাইভাররা ইতিমধ্যে ওএসের সাথে বান্ডিল করেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.