topnax / kiv-os-sp Goto Github PK
View Code? Open in Web Editor NEWA repository for the KIV/OS semester project
A repository for the KIV/OS semester project
Implement the ability to specify the absolute path or path relative to the current working directory.
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 that stores generic file objects. Write_File
, Read_File
should write to generic file objects. Same applies to Close_File
syscall.
Fix echo so that writing
> echo "" hello | hello < > hello""
or strings similar to this doesn't cause the program to crash.
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).
Implementování příkazu echo (ekvivalentu) - vypíše předaný text.
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ý
std::mutex
with std::lock_guard
or std::unique_lock
handleThatSignalledIndex
lookup in process.cpp
Wait_For
listener should explicitly be set in thread_post_execute
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”
Implementování příkazu type (ekvivalentu) - zobrazí obsah požadovaného textového souboru.
POZN.: musí umět vypsat stdin i vypsat soubor
Seek
Delete_File
Set_File_Attributes
Get_File_Attributes
Assignment:
Implementujte roury
Find out how to compile and run the template project. Writing a comment, wiki page or a MD file with instructions is sufficient.
Specification:
rgen bude vypisovat náhodně vygenerovaná čísla v plovoucí čárce na stdout, dokud mu nepřijde EOF, ETX, nebo EOT
Implementování příkazu md (ekvivalentu) - vytvoří složku (stejné jako mkdir).
type musí umět vypsat jak stdin, tak musí umět vypsat soubor
Specification:
Read_Exit_Code, //IN: dx je handle procesu/thread jehoz exit code se ma cist
//OUT: cx je exitcode
Is blocked by #22
Specification:
POZN.: musí umět @echo on a off
Echoing strings in double quotes does't work properly (in some cases)
Implementování příkazu tasklist (ekvivalentu) - vypíše seznam běžících procesů.
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
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.
Implementování příkazu find (ekvivalentu) - "find /v /c". Má se jednat o ekvivalent wc v Linuxu - spočítá výskyt jednotlivých slov.
Shell and all programs to be run from shell should each run in a separate process. This requires handling of Clone syscalls.
Implementování příkazu dir (ekvivalentu) - vypíše obsah aktuálně procházené složky.
POZN.: musí umět relativní cesty!!! + switch /S
Implementování příkazu cd (ekvivalentu) - vypíše aktuální složku / přepne na jinou.
POZN.: musí umět relativní cesty!!!
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.
|
operatorThis 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.
<
operatorSuch 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.
>
operatorThis 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"
}
}
]
}
Specification:
Implementujte přesměrování
Shell could start one program using generalized call_piped_programs
.
musite to doplnit, aby nebyla kolize s platnymhandlem
In order to use other IDEs, such as CLion, it is required to be able to build the project using CMake.
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.
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 bude vypisovat náhodně vygenerovaná čísla v plovoucí čárce na stdout, dokud mu nepřijde EOF, ETX, nebo EOT
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.).
wait_for
and thread_post_execute
are happening at oncewait_for
by moving list cleaning to thread_post_execute
Implementování příkazu rd (ekvivalentu) - odstraní požadovanou složku (stejné jako rmdir).
TK has mentioned that reading from STDIN should happen on the main thread while writing to STDOUT should happen on a secondary thread.
tbd after #32 is done
echo "type /procfs/1 | shell"
should print contents of /procfs/1
into shell's stdin and then end the shell, however shell then seems to be stuck on waiting for input.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.