Coder Social home page Coder Social logo

kiv-os-sp's People

Contributors

drtinao avatar ellaestrellam avatar topnax avatar

Watchers

 avatar

kiv-os-sp's Issues

Path specification

Implement the ability to specify the absolute path or path relative to the current working directory.

Implement Exit syscall

Specification:

Exit,		//ukonci proces/vlakno
                // IN: cx je exit code

//Navratove kody OS
enum class NOS_Error : uint16_t {
	Success = 0,				//vse v poradku
	Unknown_Filesystem,
	Invalid_Argument,			//neplatna kombinace vstupnich argumentu
	File_Not_Found,				//soubor  nenalezen
	Directory_Not_Empty,		//adresar neni prazdny (a napr. proto nesel smazat)
	Not_Enough_Disk_Space,
	Out_Of_Memory,	
	Permission_Denied,
	IO_Error,
	Unknown_Error = static_cast<uint16_t>(-1)		//doposud neznama chyba		
};

Exit(0) should be implicitly called whenever a cloned program ends.

Implement a file table

Implement a file table that stores generic file objects. Write_File, Read_File should write to generic file objects. Same applies to Close_File syscall.

Implement sort command

Implementování příkazu sort (ekvivalentu) - vypíše v abecedním pořadí jednotlivé řádky souboru např. (má i spoustu dalších využití a parametrů, je třeba checknout).

Implement the Wait_For syscall

Wait_For is used while joining threads.

Specification from api.h:

		Wait_For,			//IN : rdx pointer na pole THandle, na ktere se ma cekat, rcx je pocet handlu
							//funkce se vraci jakmile je signalizovan prvni handle
							//OUT : rax je index handle, ktery byl signalizovan

Additional information from the teacher:

Wait_For je vlastně https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-waitformultipleobjects s bWaitAll==false and dwMilliseconds==INFINITE.  Takže join skutečně použít nemůžete.

S podmínkovou proměnnou si také pomoc nepomůžete, protože byste je musel cyklicky testovat. Takže je lepší udělat ke každému vláknu seznam semaforů. Ať uděláte Wait_For,

1. tak vytvoříte nový semafor inicializovaný na 1,

2. dáte ho handlům/vláknům do seznamu objektů, které mají nějak signalizovat při skončení,

3. pak zkontrolujete, že žádné vlákno neskončilo/handle není ukončený

4. a když ne, tak ten, kdo volal Wait_For, nad tímhle semaforem zavolá P

5. takže první vzbuzené vlákno nad ním udělá V a tím čekajícího vzbudí

6. než se ale řízení vrátí zpět volajícímu, tak se semafor musí odstranit ze seznamu všech handlů a uvolnit z paměti

S pozdravem,
Tomáš Koutný

process.cpp improvements and bugfixes

  • replace direct calls to std::mutex with std::lock_guard or std::unique_lock
  • replace dangerous handleThatSignalledIndex lookup in process.cpp
    • handle that has notified the Wait_For listener should explicitly be set in thread_post_execute
    • this will require wrapping the semaphore in some structure containing a field storing the handle

Implement the freq program

Specification:
freq bude číst z stdin a sestaví frekvenční tabulku bytů, kterou pak vypíše pro všechny byty s frekvencí větší než 0 ve formátu: “0x%hhx : %d”

Implement type command

Implementování příkazu type (ekvivalentu) - zobrazí obsah požadovaného textového souboru.
POZN.: musí umět vypsat stdin i vypsat soubor

Prepare remaining syscalls

  • add following syscalls to RTL:
    • Seek
    • Delete_File
    • Set_File_Attributes
    • Get_File_Attributes
  • add stubs to handle such syscalls

Implement the rgen program

Specification:
rgen bude vypisovat náhodně vygenerovaná čísla v plovoucí čárce na stdout, dokud mu nepřijde EOF, ETX, nebo EOT

Implement md command

Implementování příkazu md (ekvivalentu) - vytvoří složku (stejné jako mkdir).

Echo with quotes

Echoing strings in double quotes does't work properly (in some cases)

shell improvement - running programs

uživatelské programy se musí spouštět na základě resolvování jména souboru, ne nějakého identifikátoru z parseru jako třeba TOKEN_RGEN

Wait_For sometimes crashes

A race condition is created while a process/thread is finishing resulting in a crash - after the semaphore in Wait_For is notified, all handles to be waited for are checked whether they have finished or not. Sometimes no such finished handle is found and the uint8_t handleThatSignalledIndex; (process.cpp) variable is not initialized.

Implement find command

Implementování příkazu find (ekvivalentu) - "find /v /c". Má se jednat o ekvivalent wc v Linuxu - spočítá výskyt jednotlivých slov.

Implement the Clone syscall

Shell and all programs to be run from shell should each run in a separate process. This requires handling of Clone syscalls.

Implement dir command

Implementování příkazu dir (ekvivalentu) - vypíše obsah aktuálně procházené složky.
POZN.: musí umět relativní cesty!!! + switch /S

Implement cd command

Implementování příkazu cd (ekvivalentu) - vypíše aktuální složku / přepne na jinou.
POZN.: musí umět relativní cesty!!!

Implement pipeline command parser

This issue deals with creating a parser capable of parsing a line containing multiple commands into a vector of structures/objects each representing a command to be executed.

Please note that each "command" consists of a name of the program to be executed and data that should be passed to the program.

Order of the commands in the command line must be preserved.

| operator

This operator does not have to be explicitly defined in the output vector structure, because the program orchestration code will implicitly use | between each program call.

< operator

Such parser should also take the < (file content forwarding into std_in) operator into consideration. This operator can only be found once and at the end of the line to be parsed and defines a path to the file to be assigned as the std_in of the first program.

> operator

This operator can only be found once and at the end of the line if < operator is not provided (otherwised followed by <). It defines a path to the file to be assigned as the std_out of the last program.

Example:

> read_in_for_records | some_program | grep "kiv_os"  > filtered.txt < file_containing_records.txt

{ 
    programs: [
        {
            "name": "read_in_for_records",
            "data": "" (or nullptr?)
            "std_in": {
                "file": "file_containing_records.txt"
            }
        },
        {
            "name": "some_program",
        },
        {
            "name": "grep",
            "data": "kiv_os"
            "std_out": {
                "file": "filtered.txt"
            }
        }
    ]
}

Create a short presentation

Summary

Průběžná prezentace proběhne dle plánu v čase přednášky. Připravte si .pdf, přístupný na veřejné URL, který budete prezentovat. Na prezentaci počítejte max. se 7 minutami včetně režie, ale bez diskuze. Nedávejte do prezentace věci všem známé - zadání, stačí jeho název na úvodním slidu se složením týmu. Na úvodním slidu musí být, v jakém poměru (procenta) si členové týmu rozdělí body za průběžnou prezentaci.

Assignment

Podklady k prezentaci se neodevzdávají, jsou pouze pro vaší potřebu.
Délka samotné prezentace je 8 až 10 minut. Celková doba obrátky jednotlivých týmů nesmí přesáhnout 15 minut.
Zájemci o prezentaci si musí předem rezervovat termín (formulář na dveřích UC303). Je vhodné dodatečně poslat e-mail o rezervaci cvičícímu pro případ, že by se papír s rezervacemi ztratil ze dveří.
K dispozici bude datový projektor a softwarové vybavení v rozvrhované laboratoři. .
Prezentace se promítá datovým projektorem, nelze ji "odvykládat z hlavy bez ničeho".
Je doporučeno předem vyzkoušet, jestli je formát vaší prezentace kompatibilní se softwarovým vybavením v laboratoři.
Tým musí být přítomen a připraven prezentovat od začátku cvičení.
Na začátku prezentace byste měli pozdravit a představit členy týmu a sebe.
Na konci prezentace byste měli poděkovat za pozornost a vybídnout posluchače k diskuzi.
Vyhněte se zdlouhavému popisu obecně známých skutečností. Například minutový popis příkazu ls nikoho nezajímá.
Nepokoušejte se o ukázku běhu vaší aplikace (to je pouze rada, ne příkaz). Je málo času a příliš velké riziko neúspěchu. Obzvlášť, pokud si to předem na konkrétním počítači, kde bude probíhat prezentace, nevyzkoušíte.
Měly by zaznít i vaše myšlenky - co se vám zdá ze zadání lehké, co naopak obtížné, jaké máte vize řešení, celkový názor, doporučení, co by se do zadání mohlo přidat nebo naopak vypustit, atd. Prostě se realizujte, rádi si vás vyslechneme.
Nezapomeňte na závěrečné zhodnocení práce.
Pozor - prezentace není dokumentace k programu. Obě tyto formy mají odlišné náležitosti a obsah.

Pokyny k průběžné prezentaci

Je vhodné, ale ne nutné, aby se prezentace aktivně zúčastnil celý tým.
Cíl prezentace - vyzkoušet si to a získat body :-)

rgen improvement

rgen bude vypisovat náhodně vygenerovaná čísla v plovoucí čárce na stdout, dokud mu nepřijde EOF, ETX, nebo EOT

Implement shutdown command

Implementování příkazu shutdown (ekvivalentu) - zajistí vypnutí počítače (v reálu má x parametrů, např. možno vypnout za určitý počet sekund atp.).

process.cpp bugs and improvements

  • there is a race condition that happens when wait_for and thread_post_execute are happening at once
  • simplify wait_for by moving list cleaning to thread_post_execute

Implement rd command

Implementování příkazu rd (ekvivalentu) - odstraní požadovanou složku (stejné jako rmdir).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.