pintos
-
[WEEK12] Lazy Loading (Pintos PROJECT3 : VIRTUAL MEMORY)SW Jungle/TIL (Today I Learned) 2022. 12. 13. 04:28
Lazy loading이라는 개념이 있다. 우리말로 옮기면 지연 로딩 정도로 말할 수 있는데, 이 Lazy loading은 어떤 개념이며 왜 사용하는 것일까? Lazy loading은 운영체제가 메모리를 할당하는 기법이라고 할 수 있다. 찾아보니 web이나 java (JPA) 쪽에서도 사용하는 용어라고 한다. 하지만 이 글에서는 운영체제 측면에 한해 다루겠다. 앞선 글에서, 가상메모리와 관련된 페이징 개념을 다뤘다. 페이징을 활용해서 연속적이지 않은 공간에 파일을 로드함으로써 공간을 효율적으로 사용할 수 있었다. 여기에 더해 Lazy loading을 활용하면 추가적인 공간적 이점과 더불어 시간적인 이점도 가져올 수 있다. Lazy 라는 말만 들으면 뭔가 더 지연될 것 같은데, 어떻게 시간적으로도 이점이 ..
-
[WEEK11] 페이징은 왜 하는걸까 (Pintos PROJECT3 : VIRTUAL MEMORY)SW Jungle/TIL (Today I Learned) 2022. 12. 6. 10:59
운영체제의 Memory Management를 구현하면서, 페이징이라는 개념이 왜 쓰이는지 궁금해졌다. 이번 글에서는 페이징이란 무엇이고, 운영체제가 페이징을 왜 하는지에 대해 알아볼 예정이다. 페이징은 메모리를 관리하는 방법이다. 페이징의 기본 아이디어는, 물리 메모리 공간과 가상 메모리 공간을 일정 크기로 나누어 매핑시켜 운영체제가 관리의 주체가 됨으로써, 물리 메모리 공간이 연속적으로 할당되지 않아도 되게끔 만드는 것이다. 질문 1. 왜 가상 메모리 공간이라는 것이 필요한 걸까? 만약 물리 메모리에서 프로그램들을 돌린다고 가정해보자. 돌려야 하는 프로그램이 하나라면, 굳이 가상메모리가 필요하지 않을 수 있다. 어차피 혼자서 메모리 공간을 다 써도 되기 때문에, 프로그램이 주어진 공간을 자유롭게 활용하..
-
[WEEK09~10] syscall wait()의 구현 - 구조 설계를 중점으로 (Pintos PROJECT2 : USER PROGRAMS)SW Jungle/TIL (Today I Learned) 2022. 11. 29. 16:15
복잡한 기능을 구현하려고 하면 막막하다는 느낌을 받을 때가 많다. 고려해야 할 요소들이 너무 많아서, 머릿속에서 마구 섞이기 때문이다. 무엇을 먼저 고려해야 구현이 쉬울까? 구현을 하는데는 다양한 방법이 있을 것이고, 각자 자기에게 맞는 방법이 있을 테니 나의 방식만이 옳다고 할 수는 없다. 하지만 아예 감조차 잡지 못하는 분들을 위해 조금이라도 도움이 되길 바라면서, 이번 Pintos Project 2 - User Programs를 구현할 때 내가 썼던 방식을 공유하려고 한다. 구현한 여러 System Call 중, wait() 기능을 구현할 때의 경험을 바탕으로 설명하겠다. 아래 이미지들은 SW정글에서 발표할 때 썼던 장표들이다. wait 함수가 올바르게 작동하기 위해서는 위와 같은 조건들을 만족해야..
-
[WEEK08] Pintos PROJECT1 : THREADSSW Jungle/TIL (Today I Learned) 2022. 11. 17. 06:41
SW정글 8주차 과정인 "Pintos PROJECT1 : THREADS"를 수행하며, 배운 내용을 정리하려 한다. Project 1 : Threads에서 구현하는 기능은 다음과 같다. - Alarm Clock - Priority Scheduling 이 글에서는 Alarm Clock만 다룰 예정이다. Alarm Clock /* 처음에 제공된 timer_sleep() 함수 */ /* Suspends execution for approximately TICKS timer ticks. */ void timer_sleep (int64_t ticks) { int64_t start = timer_ticks (); ASSERT (intr_get_level () == INTR_ON); while (timer_elapse..