|
Mavzu: Dasturlarni yaratish uchun texnik shartlarni ishlab chiqish
|
Sana | 06.07.2024 | Hajmi | 0,77 Mb. | | #266761 |
O‘ZBEKISTON RESPUBLIKASI RAQAMLI TEXNOLOGIYALAR VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI
TOSHKENT AXBOROT TEXNOLOGIYALARI
UNIVERSITETI
"Operatsion tizimlar" fanidan
Topshiriq 2
Mavzu: Dasturlarni yaratish uchun texnik shartlarni ishlab chiqish.
Bajardi: 318/21 - guruh talabasi
Abdurasulov Shohrux
Tekshirdi: Ro’ziboyev Ortiq Baxtiyorovich
Toshkent 2024
Topshiriq
1-misol.
Shortest Job First (Preemptive) algoritmi bo'yicha o'rtacha kutish vaqtini hisoblashda Python dasturlash tilida bu algoritmini amalga oshiradigan kodni yozamiz.
Shortest Job First (Preemptive) Algoritmi:
Bu algoritm jarayonlar kelish tartibiga emas, balki eng qisqa ish vaqtiga ega jarayonni tanlaydi. Agar yangi jarayon keladigan bo'lsa va uning ish vaqti hozirgi jarayondan kamroq bo'lsa, CPU yangi jarayonga o'tkaziladi.
O'rtacha Kutish Vaqti Hisoblash:
1. Har bir jarayon uchun tugallanish vaqtini (Completion Time) hisoblang.
2. Tugallanish vaqtidan kelish vaqtini (Arrival Time) ayirib, har bir jarayon uchun javob vaqtini (Turnaround Time) toping.
3. Javob vaqtidan ish vaqtini (Burst Time) ayirib, har bir jarayon uchun kutish vaqtini (Waiting Time) hisoblang.
4. Barcha jarayonlar uchun kutish vaqtlarini qo'shib, ularning soniga bo'ling va o'rtacha kutish vaqtini toping.
Jarayonlar uchun ma'lumotlar quyidagicha:
- Process Id: P1, P2, P3, P4
- Arrival Time: 0, 3, 4, 9
- Burst Time: 60, 30, 40, 10
Endi Python tilida ushbu algoritmni amalga oshiradigan kodni yozamiz:
# Jarayonlar ma'lumotlari
processes = ['P1', 'P2', 'P3', 'P4']
arrival_time = [0, 3, 4, 9]
burst_time = [60, 30, 40, 10]
# Jarayonlarni kelish vaqtiga ko'ra tartiblash
sorted_processes = [x for _, x in sorted(zip(arrival_time, processes))]
sorted_arrival_time = sorted(arrival_time)
sorted_burst_time = [x for _, x in sorted(zip(arrival_time, burst_time))]
# Kutish vaqtini hisoblash
def calculate_waiting_time(processes, arrival_time, burst_time):
completion_time = [0] * len(processes)
waiting_time = [0] * len(processes)
remaining_time = list(burst_time)
time = 0
while True:
done = True
for i in range(len(processes)):
if remaining_time[i] > 0:
done = False
if remaining_time[i] > 0 and arrival_time[i] <= time:
if remaining_time[i] < min(remaining_time[:i] + remaining_time[i+1:]):
time += 1
remaining_time[i] -= 1
if remaining_time[i] == 0:
completion_time[i] = time
if done:
break
# Javob vaqtini va kutish vaqtini hisoblash
for i in range(len(processes)):
turnaround_time = completion_time[i] - arrival_time[i]
waiting_time[i] = turnaround_time - burst_time[i]
return waiting_time
# O'rtacha kutish vaqtini hisoblash
waiting_time = calculate_waiting_time(sorted_processes, sorted_arrival_time, sorted_burst_time)
average_waiting_time = sum(waiting_time) / len(processes)
print(f"O'rtacha kutish vaqti: {average_waiting_time}")
Yuqoridagi kodda, calculate_waiting_time funksiyasi yordamida har bir jarayon uchun kutish vaqtini hisoblaymiz va keyin ularning o'rtachasini chiqaramiz. Dasturda, time o'zgaruvchisi hozirgi vaqtni ifodalaydi va har bir iteratsiyada 1 ga oshiriladi. available_processes ro'yxati shu vaqtgacha kelgan va hali tugatilmagan jarayonlarni saqlaydi. current_process o'zgaruvchisi esa eng qisqa qolgan ish vaqtiga ega jarayonni tanlaydi. process_sequence ro'yxati esa jarayonlarning bajarilish ketma-ketligini saqlaydi.
2-misol
Tartib raqam 6 bo'yicha TQ (quantum time) hisoblash uchun, tartib raqamni 3 ga bo'lib, natijaga 2 sonini qo'shish kerak.
Demak, sizning TQ (quantum time) 4 bo'ladi.
Endi, Python dasturlash tilida yozilgan Round Robin algoritmi yordamida o'rtacha kutish vaqtini hisoblash uchun dastur misoli yoziladi:
def round_robin(processes, burst_time, quantum):
n = len(processes)
rem_burst_time = list(burst_time)
t = 0
waiting_time = [0] * n
while True:
done = True
for i in range(n):
if rem_burst_time[i] > 0:
done = False
if rem_burst_time[i] > quantum:
t += quantum
rem_burst_time[i] -= quantum
else:
t += rem_burst_time[i]
waiting_time[i] = t - burst_time[i]
rem_burst_time[i] = 0
if done:
break
return waiting_time
def average_waiting_time(waiting_time):
return sum(waiting_time) / len(waiting_time)
# Misol uchun jarayonlar va ularning burst time (ish vaqti)
processes = [1, 2, 3, 4, 5]
burst_time = [10, 5, 8, 3, 4]
quantum = 4
waiting_time = round_robin(processes, burst_time, quantum)
avg_waiting_time = average_waiting_time(waiting_time)
print(f"O'rtacha kutish vaqti: {avg_waiting_time:.2f}")
Bu dasturda, processes ro'yxati jarayonlarning tartib raqamini, burst_time ro'yxati esa ularning ish vaqtini ifodalaydi. quantum o'zgaruvchisi TQ ni anglatadi. Dastur jarayonlarning o'rtacha kutish vaqtini hisoblab chiqaradi.
|
| |