일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- vm
- flutter
- System call
- Flutter
- Copy-on-write
- stack growth
- algorithm
- materialapp
- Cow
- BFS
- pintos
- file
- widget
- create
- icon button
- scaffold
- Today
- Total
목록분류 전체보기 (27)
JunHyeok

Null safety 의 필요성. 제일 처음 코딩할 때 들었던 생각이 "왜 변수 선언 하나하나에 타입을 따져가며 에러가 발생하는걸까? 당장은 Null 이여도, 언젠가 초기화를 해줄텐데!" Non-nullable인 String 타입의 name은 초기화 되어야 한다고 에러가 나고있습니다. 만약 에러가 나지 않는다면, 수백만줄이 되는 코드베이스에서 어디서 어떤 변수가 Null이 되어 에러가 나는지 찾기란 쉽지 않습니다. 또한 모든 변수에 대해 Null 처리를 하는 것도 쓸대없이 코드가 길어지는 상황만 야기합니다. 따라서 Swift의 Optional 처럼, Flutter도 2.0 버전에서부터는 Null safety를 통해 안전한 앱 개발이 가능합니다! Null Safety 추가 하지만 name이 아직 N..

간단한 Future 예제void main() { print('Before Future'); Future(() { print('running the future'); }).then((_) { print('future is complete'); }); print('after future');} 결괏값Before Futureafter futurerunning the futurefuture is complete 위처럼, Future는 순차적으로 진행되지 않으며, Event Queue 에서 선입 선출로 실행됩니다. Async method메서드를 통해서 나오는 결과들은 future 가 됩니다.await 키워드를 만날때까지 synchronous 방식으로 동작합니다.await 키워드를 만나면, ..

전체 코드 import 'dart:io'; void main() { showData(); } void showData() async { startTask(); String account = await accessData(); fetchData(account); }void startTask() { String info1 = "요청 수행 시작"; print(info1);}Future accessData() async { String account = "3000원"; Duration time = Duration(seconds: 3); if(time.inSeconds > 2) { await Future.delayed(time, (){ account = "700..

로그인 페이지 위와 같이 간단한 로그인 페이지를 만든다고 가정합시다. 해당 버튼을 모두 하나씩 만든다면 유지보수가 어렵겠죠? 따라서, 위와 같이 MyButton 클래스를 만들어 줍니다. _ 언더바를 사용한다는 것 Flutter에서 위와 같이 언더바를 넣는다면, private 하게 선언하는 것 과 같습니다. 즉 해당 파일 내에서만 사용 가능합니다. MyButton class MyButton extends StatelessWidget { const MyButton({super.key, required this.image, required this.text, required this.color, required this.radius, required this.onPressed}); ..

플러터에서 final과 const 키워드의 차이점final과 const 키워드는 모두 변수의 값을 변경할 수 없도록 하는 데 사용됩니다.1. 값 초기화 시점final: ** 변수 선언 시점에 **초기값을 반드시 지정해야 합니다. 예시: final String name = 'Flutter';const: 변수 선언 시점에 초기값을 지정해야 하고, 컴파일 타임에 값이 결정됩니다. 예시: const String message = 'Hello, Dart!';2. 메모리 할당final: 런타임에 메모리 할당const: 컴파일 타임에 메모리 할당. 불변 객체로 저장되어 프로그램 실행 속도 향상3. 객체 생성final: 새로운 객체 생성 가능예시: final List numbers = ['one', 'two', 'th..

Swap In/Out 메모리 스왑은 물리 메모리 사용을 최적화하기 위함!메인 메모리의 frame (USER POOL)이 모두 할당되면, 추가 메모리 할당 요청을 처리할 수 없음해결책 : 사용되지 않는 메모리 frame을 disk로 swap_out 하여 다른 응용 프로그램이 사용할 수 있도록 메모리 자원을 확보스왑 작업은 운영 체제에서 수행시스템이 메모리가 부족할 때 메모리 할당 요청을 받으면 페이지를 선택하여 스왑 디스크로 내보냄메모리 프레임의 정확한 상태를 디스크에 복사프로세스가 스왑 아웃된 페이지에 접근하려고 하면 운영 체제가 페이지를 메모리로 복원익명 페이지와 파일 기반 페이지의 스왑 처리Anon page 는 백업 스토리지가 없음, 임시 백업 스토리지로 swap_disk 사용File-backed-p..

Memory Mapped Files Memory Mapped Files기존 파일의 데이터를 반영하는 페이지 단위 매핑 방식페이지 부재 (page fault) 발생 시 물리 프레임 할당 및 파일 내용 복사System call mmap: 메모리 맵핑 수행munmap: 메모리 맵핑 해제구현 방법:lazy loading 을 활용! (lazy_load_segment 코드 참조) lazy loading 을 위해서, 파일 메타데이터를 저장함!구현 코드 위치:vm/file.c: do_mmap & do_munmap 함수 정의 mmap void *mmap (void *addr, size_t length, int writable, int fd, off_t offset); 매핑 방식파일 디스크립터 fd로 열린 파일의 ..

Stack Growth Userprog 에서는 아래와 같이 단일 페이지의 스택만을 활용하였다./* Create a minimal stack by mapping a zeroed page at the USER_STACK */static boolsetup_stack (struct intr_frame *if_) { uint8_t *kpage; bool success = false; kpage = palloc_get_page (PAL_USER | PAL_ZERO); if (kpage != NULL) { success = install_page (((uint8_t *) USER_STACK) - PGSIZE, kpage, true); if (success) if_->rsp = USER_STACK; else ..

파일 기반이 아닌, 익명 페이지를 구현해야 한다! Page Initialization with Lazy Loading지연 로드 개념메모리 로드를 필요한 시점까지 미루는 설계 방식입니다.페이지는 할당되었지만, 실제 물리적 프레임이나 콘텐츠는 아직 로드되지 않은 상태입니다.페이지 폴트가 발생할 때 콘텐츠가 로드됩니다.페이지 초기화 흐름vm_alloc_page_with_initializer 호출: 커널이 새로운 페이지 요청을 받을 때 호출됩니다.페이지 구조체를 할당하고 페이지 타입에 따라 적절한 초기화자를 설정합니다.사용자 프로그램으로 제어를 반환합니다.페이지 폴트 발생: 프로그램이 콘텐츠가 아직 로드되지 않은 페이지에 접근을 시도할 때 발생합니다.uninit_initialize 호출: 페이지 폴트 처리 과정..

Implement Supplemental Page Table 현재 Pintos 시스템은 메모리의 가상 주소와 물리 주소 매핑을 관리하는 페이지 테이블(pml4)을 가지고 있습니다.앞 장의 논의처럼, Page Fault Handle 과 자원 관리를 위해 각 페이지에 대한 추가 정보를 저장하는 supplementary page table이 필요합니다.따라서 프로젝트 3의 첫 번째 작업으로 supplementary page table의 기본 기능을 구현합시다!1) SPT의 자료구조 선택 ./* Representation of current process's memory space. * We don't want to force you to obey any specific design for this stru..