파일 시스템
·
CS
외부에서 전송된 파일을 내 컴퓨터에 안전하게 저장하고 찾기 위해서는 파일 시스템이 필요합니다.만약 파일 시스템이 없다면 어떻게 될까요? 해당 답은 이 글을 전부 다 읽고 나면 정리가 될 것입니다.기본 개념들파일(📁): 관련된 데이터들을 하나의 단위로 묶어서 저장한 것.크게 2가지로 나뉩니다1. 텍스트 파일 사람이 읽을 수 있는 문자로 구성된 파일로서 아스키 또는 UTF-8등의 문자 인코딩을 사용합니다. 우리가 자주 사용하는 메모장 혹은 vim 명령어로 직접 편집이 가능합니다.2. 바이너리 파일컴퓨터가 직접 해석하는 이진 데이터로 구성된 파일로 압축률이 높고 처리속도가 빠릅니다. 일반적으로 실행 파일, 이미지, 오디오, 비디오 등 모든 데이터를 의미합니다. 디렉토리(🗂️): 파일들을 논리적으로 그룹화한..
Process Management와 System Call(커널 헷갈리는 개념 정리)
·
CS
1. 시스템 콜의 깊은 이해swift에서는 출력을 원할 때 print메서드를 사용합니다. 제가 만든 건 아니고 Swift 라이브러리에 구현된 함수입니다.print는 I/O메서드입니다. (원하는 값을 출력해주기에)그런데 유저모드에서는 직접 I/O가 불가능 합니다. 그렇기 때문에 내부의 시스템 콜을 거쳐 커널에게 "화면에 출력해줘!!"라고 요청을 해야합니다.1.1 시스템 콜 래퍼 루틴내부에는 write() 라는 시스템 콜 래퍼가 숨어있습니다mov eax, 4 ; write 시스템 콜 번호mov ebx, 1 ; stdoutmov ecx, msg ; 출력할 문자열mov edx, len ; 문자열 길이int 0x80 ; 시스템 콜 호출!위는 예시의 어셈블..
프로세스 메모리 (Swift의 heap은?)
·
CS
초기 컴퓨터의 한계와 문제점초기 컴퓨터 시스템을 보면 정말 단순했습니다. 한 번에 하나의 프로세스만 실행할 수 있었고, 메모리도 물리적으로 직접 할당하는 방식이었죠.그런데 이 방식에는 치명적인 문제가 있었습니다. 🤔단일 프로세스 실행의 한계타임셰어링 환경이 등장하면서 여러 사용자가 동시에 컴퓨터를 사용하려는 요구가 생겼는데, 기존 방식으로는 이를 전혀 충족할 수 없었습니다. 한 사용자가 프로그램을 실행하면 다른 사용자는 그냥 기다려야 했거든요.메모리 활용의 비효율성물리 메모리에 프로세스를 직접 할당하다 보니까, 메모리 공간이 심하게 낭비되는 경우가 많았습니다. 예를 들어 1MB 프로세스를 위해 2MB 영역을 할당하면 1MB는 그냥 버려지는 식이었죠.이 문제를 해결하기 위해 메모리를 동일한 크기의 파티션..