본문 바로가기

CS

(7)
[운영체제] 가상 메모리 안녕하세요.이번 글에서는 운영체제 중 가상메모리에 공부하고 정리한 글입니다.가상 메모리(Virtual Memory)란프로세스가 Page라는 작은 단위(보통 4KB)로 구성된 논리 주소 공간(logical address space)을 사용하는 것을 가상 메모리라고 한다.또한, 물리 메모리(physical memory)를 Page 크기와 동일한 크기인 Frame 단위로 관리해 Page Table을 통해 논리 주소 공간과 물리 주소 공간을 매핑한다.이를 통해 CPU는 MMU(Memory Management Unit: CPU와 메모리 사이에서 논리 주소를 물리 주소로 변환하는 하드웨어 장치)를 통해 특정 Page와 매핑된 Frame을 참조하여 프로세스를 실행한다.가상 메모리는 왜 필요했을까?가상 메모리가 등장하..
[운영체제] 파일 시스템 안녕하세요.이번 글에서는 파일 시스템에 대해 정리해보려 합니다.파일 시스템이란, 파일과 디렉터리를 보조기억창지에 효율적으로 저장 및 읽어올 수 있게 해주는 운영체제에 탐제된 내부 프로그램이다.파일 할당먼저, 파일 시스템이 어떻게 보조기억장치에 파일을 저장하고 읽어오는지에 대해 알아보자.운영체제는 블록 단위로 파일을 읽고 쓴다. 때문에 파일은 하나 이상의 블록에 저장된다.여기서 블록이란 하나 이상의 섹터(하드 디스크의 가장 작은 단위)를 묶은 단위이며, 섹터라는 단위는 너무 작기 때문에 블록이라는 단위를 사용한다. (SSD의 경우 페이지라는 단위를 사용)파일 할당 방법은 다음과 같다.연속 할당불연속 할당연결 할당색인 할당연속 할당연속 할당은 가장 단순한 방식이다. 보조기억장치에 연속적으로 파일을 저장하는 ..
[운영체제] 파일과 디렉토리 안녕하세요.다음글 주제인 파일시스템에 대해 정리하기 전에먼저 파일과 디렉토리에 대해 간단하게 정리해보려 합니다. 파일보조기억장치에 저장된 정보의 집합 or 의미있고 관련있는 정보를 모은 논리적 단위모든 파일에는 실행을 위한 정보와 관리를 위한 메타데이터(or 속성)가 존재한다.파일에 대한 읽기, 쓰기, 생성, 삭제 등의 모든 작업은 운영체제를 통해서만 이루어지며, 어떤 응용 프로그램도 임의로 파일을 조작할 수 없다.메타데이터운영체제 별로 담고있는 메타데이터의 차이가 있지만, 대표적으로 다음과 같다.확장자(파일 유형)크기접근권한(어떤 사용자가 읽기, 쓰기, 실행 권한이 있는지)생성 날짜, 마지막 접근 날짜, 마지막 수정 날짜생성자(파일을 생성한 사용자)소유자(파일을 소유한 사용자)위치(경로) 확장자의 경우..
[자료구조] Hash Table(with. Swift) 안녕하세요.이번 글은 자료구조 중 하나인 Hash Table에 대해 알아보고 정리한 글입니다.Hash Table해시 테이블은 Key를 통해 Value를 저장 및 읽어올 수 있는 자료구조이다.Swift에서는 딕셔너리가 Key - Value 쌍으로 값을 저장할 수 있는 타입인데 이는 딕셔너리가 해시 테이블을 기반으로 구현된 컬랙션 타입이기 때문이다. 해시 테이블의 대표적인 특징으론 Key를 통해 Value를 읽어올 때 시간복잡도가 O(1)이다.(하지만, 최악의 경우는 O(n)이다. 이유는 아래에서)해시 테이블은 값을 저장하기 위해 내부적으로 배열을 사용한다. 그럼 어떻게 Key를 통해 저장하냐? Key 값을 해시 함수를 통해 고유한 정수 값으로 변환하고, 해당 값을 Index로 사용해 배열에 저장하는 방식이..
[Swift] Race Condition과 Thread Safe 비동기적으로 기능을 구현하다 보면, 순차적으로 코드가 실행되는 것이 아니다 보니 주의해야 할 점이 생긴다. 그중 Race Condition과 해결책인 Thread Safe에 대해 알아보고자 한다.Race ConditionRace Condition 이란, 여러 Thread가 하나의 자원에 동시에 접근해서 자원이 변질되어 원하는 결과가 나오지 않는 현상을 뜻한다. 비동기적으로 코드가 실행되면, 여러 Thread 동시에 하나의 자원에 접근하는 경우가 생긴다. 이때 Thread가 한 자원 접근해 해당 자원에 변화를 주게 되면, Race Condition 발생되고, 원하는 결과를 얻기 힘들어진다. 코드를 통해 이해해 보자.var books = ["어린왕자", "백설공주", "해리포터", "신데렐라", "알라딘",..
[Swift] 객체지향(OOP) 오늘 내용은 객체지향 패러다임과 객체지향의 특징인 일반화, 추상화, 은닉화, 캡슐화이다.객체지향이 만들어진 이유는 프로그램을 만드는 이들이 세상을 프로그램으로 나타내려는 과정에서 만들어졌다. 때문에 우리가 사는 세상처럼 객체를 중심으로 서로 상호작용하며, 프로그램이 동작하게 된다.그 과정에서 만들어진 일반화, 추상화, 은닉화, 캡슐화를 한 문장으로 정리하면,일반화란, 공통된 특성 또는 행위를 묶어 놓은 것추상화란, 객체를 나타냄에 있어 중요한 포인트만 추려내는 것은닉화란, 외부로 보일 필요가 없거나, 그러면 안 되는 특성 또는 행위들을 숨겨놓은 것캡슐화란, 숨겨진 특성 또는 행위를 외부에서 제어할 수 있도록 행위만을 제공해 주는 것📝 타입을 정의할 때 구조체와 클래스가 사용되는데, 둘의 차이에 대해서위..
git과 github 기본 오늘날 git를 이용한 협업이 매우 중요하죠. 그래서 이번 기회에 기본적인 걸 배웠고 그것을 기록해 둘까 합니다.먼저, git은 많은 버전 관리 시스템 중 하나입니다.git에 장점은,복잡한 Branch* 관리에 적합심플하지만 핵심적인 기능 강력로컬 저장소와 원격저장소의 분리빠른 속도다양한 서비스 업체다양한 보조 툴이 있다고 합니다. 본격적으로 git에 대해 기록하자면,Working Directory지금 컴퓨터에서 실제 작업하는 디렉토리, 만들거나 수정 등 어떠한 작업을 한 디렉토리 Staging Area저장소로 파일이 들어가기 전 준비 공간준비 공간에 들어온 파일(git add한 파일)은 깃이 추적을 시작하게 되고, Local Repo에 들어갈 준비(git commit)를 마치게 된다.때문에, 파일a, ..