32비트 환경 운영체제 64비트 환경 운영체제라는 말을 들어봤을거다. 32비트 환경 운영체제는 32비트 아키텍쳐에 대응되는 운영체제를 말하고, 64비트 환경 운영체제는 64비트 아키텍쳐에 대응되는 운영체제를 말한다. 그렇다면 32비트와 64비트 아키텍쳐란 뭘까? 그것을 알아보자.기본개념비트(Bit)란?컴퓨터가 처리하는 이산 데이터의 양을 나타내는 가장 작은 단위이며 0과 1 이진법을 사용해 나타낸다.32비트와 64비트 아키텍처란?32비트 아키텍쳐: 한 번에 32비트 데이터 양을 처리할 수 있는 CPU구조64비트 아키텍쳐: 한 번에 64비트 데이터 양을 처리할 수 있는 CPU구조메모 주소 지정 능력 32비트 시스템: 이론적으로 최대 4GB의 RAM을 지원한다. 이는 2^32개의 메모리 주소를 사용할 수 있..
지연 로딩은 메모리 로딩을 필요한 시점까지 미루는 설계 방식이다. 페이지 구조체는 할당되어 페이지에 해당하지만, 전용 물리 프레임은 없고 페이지의 실제 내용은 아직 로드되지 않는다. 내용은 실제로 필요한 시점에만 로드되며, 페이지 폴트에 의해 로드된다.페이지 타입이 세 가지이므로 초기화 루틴은 각 페이지마다 다르다. 커널이 페이지 할당 요청을 받으면 vm_alloc_page_with_initializer를 호출한다. vm_alloc_page_with_initializer함수는 페이지 구조체를 할당하고 페이지 타입에 따라 적절한 초기화 함수를 설정하여 초기화한 후 supple_ment_page_table에 삽입한다. 프로세스는 실제 메모리에 로드가 되지 않은 가상주소로 접근을 한다. 이때 페이지에 내용이 ..
frame_table프레임 테이블을 만들어야하는 이유는 뭘까? 우리는 페이지 폴트시 프레임을 할당하고 페이지와 매핑해야한다. 이때 그것을 관리하는 페이지가 필요하게된다. 그렇담 이것을 언제 활용하게 될까?프레임 테이블은 현재 물리메모리에 올릴수 있는 프레임이 꽉차 더이상 물리메모리에 올릴수 없을때 어느 프레임을 swap out을 할지 정할때 사용하게 된다. 이때 프레임 테이블을 참조해 교체 알고리즘에 때라 swap out할 프레임을 정하게 된다.struct framevm헤더 파일에 frame_table을 정의한다. list로 frame_table을 만든 이유는 clock 교체 알고리즘을 사용하기 위해서다.그리고 frame 구조체에 프레임 테이블에 삽입할 list_elem을 정의한다.vm/vm.hstruc..
Virtual Memory가상메모리는 DRAM의 추상화다. 이게 무슨 말일까? CPU가 데이터를 읽고 쓰려면 물리메모리 즉, DRAM에 적재되어야 사용할 수 있다. 이때 우리는 이런 경우를 신경쓸 필요가 있나?파일을 로드하거나 동적으로 메모리를 할당할때 물리메모리의 어느곳에 적재되어야하는지물리메모리의 크기보다 데이터의 크기가 클때 어떻게 해야하는지현재 실행중인 프로세스가 다른 프로세스가 사용중인 메모리 영역을 침범하지는 않는지 우리는 이런 경우를 신경 쓰지 않고 정적 파일을 물리메모리에 로드하거다 동적으로 메모리를 할당 받는다. 이런 궂은 일은 운영체제가 하고 우리에게는 API를 제공해주는 거다. 우리는 DRAM을 추상화한 가상메모리를 사용하는거다.처음 운영체제를 설계할때 디자인 컨셉중에 하나는 하나의 ..
목표Alarm Clock기능을 구현해 쓰레드를 일정시간(ticks) 대기상태에서 준비상태로 전환시킨다.Alarm ClockAlarm Clock은 지정된 시간(tick)에 스레드를 깨우는 기능이다. 특정 시간 후에 작업을 수행해야 하는 경우 (예: 주기적인 작업, 타임아웃 처리 등)에 사용할 수 있다.도출과정초기 Pintos의 timer_sleep기능은 일정 시간(tick)동안 실행상태의 쓰레드를 지속적으로 준비상태로 바꾸는 busy wait 방식이다.이를 해결하기 위해 쓰레드를 대기(block)상태로 전환뒤 다른 컨텍스트들을 실행하다 깨워야하는 시간이 됐으면 unblock하는 방식으로 구현을 진행한다.대기(block)상태의 쓰레드를 unblock시킬 컨텍스트가 필요하다 timer인터럽트는 매 tick발생..
개발환경 구축가상환경Ubuntu 18.04우분투 18.04를 실행하기 위해 세가지 선택지가 있었다AWS EC2MS AZUREDocker우선 도커는 내 환경이 ARM기반 맥북이어서 설정이 매우 번거로워서 세팅할 시간을 돈으로 사야겠다 생각해서 클라우드서비스를 이용하기로했다.처음에는 EC2를 사용했지만 우분투 18.04가 부분 무료여서 한달간 핀토스를 하게되면 5만원 이상 나올것 같아서 일주일 사용하고 azure로 갈아탔다.Azure는 1위 업체가 아니기 때문에 저렴하고 가상머신 내렸다가 올렸을때 ec2와는 다르게 ip변동이 없어 azure를 사용하게 됐다. 개발툴SFTP클라우드를 사용하면서 불편했던점이 내 로컬에서 코드를 작성하고 가상환경에서 테스트를 하는데 불편함이 있었다 처음에는 SFTP를 사용했는데 ..