Skip to content

Instantly share code, notes, and snippets.

@deomorxsy
Created January 12, 2022 02:36
Show Gist options
  • Save deomorxsy/5c3e2305e0c8d1ec13c82b84b02a5877 to your computer and use it in GitHub Desktop.
Save deomorxsy/5c3e2305e0c8d1ec13c82b84b02a5877 to your computer and use it in GitHub Desktop.
second chance page replacement policy/algorithm
import sys
from threading import Thread
import time
#def only_a_second_chance():
def second_chance(page_requests, mem_size, page_faults, m, thread_name):
#mem_size = int(sys.argv[1]) # N, physical memory
mem_size = mem_size
page_faults = page_faults
m = []*mem_size #popula a lista com os slots, ou indexes totais
for index in page_requests:
s = index.split(':') #: trata o texto e separa set/destroy/create do numero da pagina
page = s[1]
print("PAGE = {}".format(page))
# verifica se ja existe em memoria
if page not in m:
# se houver espaco de memoria, insira a nova pagina no fim
if len(m) < mem_size:
m = m + [page] #m.append(page)
page_faults += 1
print("{} {} exists in memory /// {}".format(thread_name, page, time.ctime(time.time())))
# se nao houver espaco de memoria, remove a primeira pagina da lista e adiciona a nova no final
else:
m.pop(0)
m.append(page)
page_faults += 1
print("{} {} DONT exist in memory /// {}".format(thread_name, page, time.ctime(time.time())))
# se nao existir, adiciona sem problema algum, nao acusando page fault
else:
m.remove(page)
m.append(page)
print("{} {} nao existia in memory, agora existe /// {}".format(thread_name, page, time.ctime(time.time())))
print("|> Mem State: {}".format(m))
print("|> Page Faults: {}".format(page_faults))
def main():
#python <filename.py> <memory_capacity> <requested_accesses.txt>
try:
with open(sys.argv[2], 'r') as file:
page_requests = file.read().split()
file.close()
print("passou try")
except IndexError:
print("caiu no IndexError")
if len(sys.argv) != 3:
print("Usage: $ python optimal.py <Number of physical memory pages> <access sequence file>")
sys.exit()
print("Escopo Atual: funcao main()")
mem_size = int(sys.argv[1]) # N, physical memory
page_faults = 0
m = []#*mem_size #popula a lista com os slots, ou indexes totais
Thread(target=second_chance(page_requests, mem_size, page_faults, m, "T1")).start()
Thread(target=second_chance(page_requests, mem_size, page_faults, m, "T2")).start()
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment