1.먼저 -n 10 -H 0 -p BEST -s 0 플래그로 실행하여 몇 개의 무작위 할당과 해제를 생성하세요. alloc()/free()가 무엇을 반환할지 예측할 수 있나요? 각 요청 후에 프리 리스트의 상태를 추측할 수 있나요? 시간이 지남에 따라 프리 리스트에서 무엇을 알 수 있나요?A : 풀이 방법더보기[1000..............................................................1099]Free List: [ addr:1000 sz:100 ]Free(ptr[0]) : 병합 없음, 반환 값 01) Alloc(3)프리 리스트에서 “3B를 담을 수 있는 가장 작은” 블록 찾기→ 후보는 [1000,100] 하나뿐 → 선택선택한 블록을 앞에서 3B 잘라서 주고, ..
가정이번 챕터의 논의의 대부분은 사용자 수준 메모리 할당 라이브러리에 존재하는 메모리 할당기의 발전 역사에 초첨을 맞춘다....malloc()과 free()에서 제공하는 것과 같은 기본 인터페이스를 가정한다. 구체적으로 void *malloc (size_t size)는 응용 프로그램이 요청한 바이트 수를 나타내는 변수 size를 받아들인다. 이 함수는 요청된 크기와 같거나 큰 영역을 가리키는, 타입이 없는 또는 C 언어의 용어로 void 포인터를 반환한다. 대응되는 루틴 void free(void *ptr)는 포인터를 인자로 전달받고 해당 영역을 해제한다.인터페이스의 의미에 주의하라 공간을 해제할 때 사용자는 라이브러리에게 크기 정보를 전달하지 않는다. 라이브러리는 포인터만으로 해제하고자 하는 메모리 영..
주소 변환의 원리문제의식 : 각 프로세스가 "자기만의 주소 0부터" 쓰게 하면서도 서로 간섭하지 않게 하고, 물리 메모리에 유연하게 배치하려면? --> 가상 주소 --> 물리 주소로 바꿔주는 MMU가 필요핵심 기술(초기형): Base + Bound가상 주소에 베이스 레지스터 값을 더해 물리주소를 얻고, 바운드 레지스터로 범위를 검사(보호), 벗어나면 예외운영체제의 역할(개입 시점)프로세스 생성: 빈 슬롯 찾아 할당종료: 회수문맥 교환: 각 프로세스의 Base/Bound를 저장·복원보호 위반: 예외 처리핵심 메시지: 단순·빠르지만 주소공간이 크거나 드문드문 쓰일 때 낭비/유연성 한계가 생김. 그래서 더 발전된 기법(세그멘테이션/페이징)으로 발전세그멘테이션아이디어: Base/Bound를 "세그먼트별"로 일반..
주소 변환의 원리메모리 가상화는 가상화를 제공하는 동시에 효율성과 제어 모두를 추구한다.효율성: 레지스터, TLB(Translation Lookaside Buffer) 등의 하드웨어 지원을 활용해 주소 변환의 효율을 높인다.레지스터: CPU 내부에 있는 고속의 작은 메모리로, 자주 사용되는 데이터나 명령어를 저장하여 빠른 접근을 가능하게 한다.TLB: 최근에 사용된 가상 주소와 물리 주소의 매핑 정보를 캐시로 저장하여, 주소 변환 속도를 향상시킨다.제어: 운영체제는 각 프로세스의 주소 공간을 분리하여 관리함으로써, 한 프로세스가 다른 프로세스의 메모리에 무단으로 접근하는 것을 방지한다. 이를 통해 시스템의 안정성과 보안을 높인다.유연성: 가상 메모리 시스템은 프로그래머가 물리 메모리의 제약에 구애받지 않..
초기 컴퓨터 시스템의 운영체제는 사용자에게 그다지 많은 기능을 제공하지 않았다. 운영체제는 단지 물리주소 0번지부터 메모리에 위치했다.하나의 프로세스가 물리 메모리의 특정 영역을 독점적으로 사용하고, 나머지 공간은 다른 용도로 사용했다. 초기 시스템에서는 특별한 가상화 기술이 거의 없었다.멀티프로그래밍과 시분할CPU는 실제로 하나지만 , 여러 프로세스가 마치 자신만의 CPU를 가진 것처럼 느끼게 하는 것이 목표다. 이를 통해 다수의 프로세스가 동시에 실행되는 것 같은 환상을 만들어 냈다.시분할 시스템은 컴퓨터 가격이 높았던 시절 더 많은 사람이 동시에 사용할 수 있게 하고 자원 활용도를 극대화할 방법으로 개발되었다. 이는 여러 사용자가 컴퓨터를 동시에 쓸 수 있게 함으로써, 기존의 일괄 처리 방식에 비해..
비례 배분(Proportional Share) 혹은 공정 배분(Fair Share) 스케줄링은 기존의 스케줄링 알고리즘과는 다른 목적을 가지고 있다. 이전의 알고리즘들이 반환 시간(turnaround time)이나 응답 시간(response time)을 최적화하는 데 중점을 뒀다면, 비례 배분 스케줄링은 각 작업(job)이나 프로세스에게 CPU 시간의 일정 비율을 보장하는 것을 목표로 한다.비례 배분 스케줄링의 대표적인 예시로는 Waldspurger와 Weihl이 제안한 추첨 스케줄링(Lottery Scheduling)이 있다. 이 아이디어 자체는 상당히 오래되었는데, 그 기본 개념은 매우 간단하다. 다음에 실행할 프로세스를 추첨을 통해 랜덤 하게 선택하되, CPU 시간을 더 많이 할당받아야 할 프로세스..