분류 전체보기
-
무럭무럭 (스마트 콘크리트 자동양생 시스템)Projects/아두이노 2024. 6. 1. 12:18
시작하며,저의 학부시절 진행했던 팀프로젝트에 대해 작성해보려고 합니다.저는 건축공학 전공이여서 건축에서 발생하는 문제를 it기술로 해결해보고 싶었습니다. 해당 프로젝트를 통해 제가 it쪽으로 진로를 잡게된 계기기도 하고 제겐 애착도 많고 의미도 큰 프로젝트였습니다.개요콘크리트 양생콘크리트는 타설 한 후 소요기간 (3일~7일)까지 경화에 필요한 온도와 습도를 유지해야합니다.기존 콘크리트 양생의 문제점열풍기, 스토프, 열선, 난로 등을 설치해 재래식으로 사람의 경험에 의존해 수동으로 양생하므로 정확한 온습도 조절이 어렵다.화덕식을 많이 이용하는데 이는 유해가스가 발생해 환경오염과 인명사고를 일으킴.스마트 콘크리트 양생 시스템의 필요성센서를 기반으로 온도와 습도 조절을 자동화해 무인으로 공백없이 정확하고 균일..
-
PintOS Project 3 VM swap in/outSW Jungle/TIL 2024. 5. 28. 02:42
핀토스 프로젝트 3 의 마지막 구현 과제인 (cow 제외) swap in/out 구현에 대한 이야기를 작성 해보려고 한다.기초적인 swap in out 에 대한 이야기와 내가 구현한 방법과 어이없는 실수로 인한 디버깅을 이야기 해보겠다. Swap in / out 이 뭔데요???운영체제의 메모리 관리 기법중 하나이다. 당장 사용할 (페이지폴트나서 요청받은) 새로운 물리 메모리가 필요한데 이미 (사용자 영역의) 물리 메모리가 꽉차서 더이상 새로운 물리 메모리 프레임도 할당 받지 못 할 때 안쓰는 다른 프레임을 하드 디스크의 스왑 영역에 보내버리고 그 공간을 지금 쓰고싶은 페이지에게 주는 것이다. Swap in / out Flow메모리가 꽉 차서 frame 할당 받는 것에 실패한다.현재 물리 메모리에 올라가있..
-
PintOS's Memory StructorSW Jungle/TIL 2024. 5. 21. 19:58
이번글에서는 핀토스 VM 프로젝트를 진행하며 공부하게된 페이징 기법과 핀토스의 메모리 구조에 대해 글을 써보려고한다. 더보기목차프레임 과 페이지페이징핀토스에서의 주소 변환핀토스의 메모리 구조프레임과 페이지프레임(frame): 물리 메모리를 일정한 크기로 나눈 블록이다. 페이지(page): 가상 메모리를 일정한 크기로 나눈 블록이다. 프레임과 페이지의 크기는 동일한 크기를 가지며 이 일정한 크기는 페이지 크기이다.일정한 크기 == 페이지 크기(사이즈) == 2^12 == 4096 주소 하나당 1byte의 크기를 저장 할 수 있다. 따라서, 4096개의 주소 * 1byte = 4kB 이므로, 페이지 하나는 4kB의 크기를 가진다. 페이지나 프레임이나 4096개의 연속된 행이 있는 리스트 라고 보았을 때 4..
-
pintos forkSW Jungle/TIL 2024. 5. 14. 06:17
sw사관학교 정글 과정중 pintos project 2 진행중에 구현한 fork 의 과정을 추척하는 글을 작성 해보려고 한다. 목차pintos에서의 forkfork 과정 추적1. userprogram 에서 fork 함수 호출 2. lib/user/syscall.c 에서의 처리 3. syscall-entry.S 4. userprog/syscall.c 의 syscall_handler 함수 5. userprog/process.c 의 process_fork() 6. threads/thread.c thread_create() 함수 7. do_fork 8. 다시 process_fork결론 pintos에서의 fork Pintos에서 'fork' 구현 목표는 부모 프로세스의 주소 공간을 정확하게 복사하여 자식 프로세스..
-
pintOS 에서 thread_yield() 에서 커널 패닉이 날때Archive/Issue Solve 2024. 5. 6. 15:36
문제 발생Formatting file system...Kernel PANIC at ../../threads/thread.c:474 in thread_yield(): assertion `!intr_context()' failed. 핀토스 프로젝트 2 user program 진행중 단일 테스트를 실행하면 위와 같은 커널 패닉이 자꾸 나타났다.ec2를 사용하는 동료는 해당 패닉이 발생하지 않고 wsl 을 사용하는 나에게 만 발생했다. 추적패닉에 적힌대로 thread.c 파일로 찾아가 474라인의 thread_yield()를 불렀는데 assert 문의 !intr_context() 에서 false 가 걸리는 것을 해결해야한다. intr_context() 함수는 현재 외부 인터럽트를 처리중이었다면(인터럽트 핸들러..
-
OS Project 1 WIL - alarm clock, priority카테고리 없음 2024. 5. 2. 09:32
OS Project 1 WIL1. Alarm Clocktimer interrupttimer는 하드웨어를 통해 초당 PIT_FREQ 회 interrupt가 발생함.4tic마다 time slicing하여 멀티 태스킹을 할 스레드들이 골고루 cpu 연산 작업을 하기 위해 timer interrupt를 사용함.interrupt는 지금 실행중인 thread를 잠깐 멈추고 그 interrupt에 해당하는 핸들러를 수행하도록 함. interrupt 핸들러가 수행되면 기존에 작업하던 스레드로 돌아감.Problempintos는 busy waitng 방식으로, ready queue에서 깨어날지 안할지를 thread_yield ()를 매번 발생시켜 cpu에서 확인함. cpu에서 확인하기 때문에 그만큼 쓸데없는 자원을 많이 ..
-
day ~ 50SW Jungle/daily 2024. 5. 1. 10:50
다시 오랜만에 글을 작성한다.그동안은 어땠는가 늦게 자고 늦게 일어나서 운동을 안하며 지냈다. 젠장 🥲그래도 공부는 열심히 했다. 말록랩, 프록시 등을 지나며 핀토스를 하고있다. 모르는 것 투성이에 공부할수록 배워야 할 것들은 늘고 지금 눈 앞에 있는 지식도 제대로 얻었는지 긴가 민가 하다. 그래서 그런가 동료들의 고민들도 많이 들린다.나도 예전엔 고민을 많이 한 것 같은데 요즘 너무 고민을 안하고 낙천적으로만 지냈나 싶기도 하다. 내가 여기서 얻어가고싶은 것은 뭐였고 수료한 직후 무엇을 하고 싶었는지 다시 되돌아봐야겠다. 답을 내지 못해도 열심히 고민했다면 충분하다고 생각한다. 어차피 답은 없다. 답이아니여도 반복문을 돌다보면 도달한다고 생각한다. 고민해도 결국 오늘 내가할일은 똑같다.아침에 일어나 ..
-
Pintos 디버그 세팅하기Archive/Tips 2024. 4. 26. 14:58
pintos kaist 프로젝트를 시작하게 되었다. 디버깅에 관한 팁을 적고자한다.pintos kaist 공식 문서에서 제공하는 디버깅 방법중 하나인 gdb 사용 법을 우선 적어보고자 한다.편하게 디버깅 툴을 쓰던 것과 달리 꽤나 원시적이라고 느껴서 이를 원시인 방법이라고 적겠다 🙉🙉원시인 디버깅1. gdb 가 설치되어있는가?우선 실행 환경에 gdb를 설치할것커널에gdb를 쳐서 설치되었는지 확인해보고 없다면sudo apt install gdb로 설치 2. pintos 실행핀토스를 실행할때 여러 옵션을 주고 실행할 수 있는 것을 아는가? pintos.c 를 까보아도 되고 pintos -h 를 실행해도 된다.--gdb 옵션을 pintos 명령어 다음에 인자로 주면 디버깅 을 할수있다.추가 tip`--` ..