반응형

**극꼼이네 GGTales** 307

[Rust] 함수 동작 원리

fn 키워드는 새로운 함수의 선언을 가능하게 하고, 중괄호는 컴파일러에게 함수의 시작과 종료 지점을 알려줍니다. Rust 코드는 Snake case 규칙으로 함수 이름을 네이밍합니다. * Naming 규칙(camel, kebab, pascal, snake case) : https://geukggom.tistory.com/251 fn main() { println!("Hello, world!"); snake_case_function(); } fn snake_case_function() { println!("Snake case"); } 1) 함수 매개변수 parameter(매개변수)와 타입 argument(인수)를 혼용해서 사용해선 안 됩니다. 아래 예시에서 x가 매개변수, 숫자 5가 인수입니다. fn ma..

[Rust] 2023.07.19

[Rust] 데이터 타입

Rust에서 사용되는 모든 값들은 타입을 가지며, 반드시 컴파일 시에 정해져있어야 합니다. let guess = "42".parse().expect("Not a number"); 위와 같이 코드를 입력하면 타입 명시를 하지 않았다는 에러(consider giving 'guess' a type)가 뜹니다. 따라서 다음과 같이 타입을 명시하여 코드를 입력해주어야 합니다. let guess: u32 = "42".parse().expect("Not a number"); // u32는 부호가 없는 32비트의 변수 [스칼라 타입] 스칼라는 하나의 값으로 표현되는 타입으로, Rust는 정수형, 부동소수점 숫자, boolean, 문자 4가지 스칼라 타입을 가지고 있습니다. 1) 정수형 : signed는 부호가 있는 타..

[Rust] 2023.07.18

[Rust] 변수와 가변성

Rust의 기본 변수는 C#과는 달리 불변성입니다. Rust는 컴파일러가 불변 변수 값에 대한 보증을 해주는데, 이는 안전성과 동시성이라는 장점을 취하기 위해 강제하는 요소입니다. let x = 5; println!("x : {}", x); x = 6; println!("x : {}", x); 다음과 같이 코드를 작성한 후 실행을 하면 에러가 출력됩니다. 이는 불변 변수에 두번째 값을 할당하려 했기 때문입니다. 가변 변수로 만들어주기 위해서는 mut를 입력해주어야 합니다. let mut x = 5; 데이터 구조체의 규모가 작을수록 새 인스턴스를 생성해 할당하고, 클수록 가변한 인스턴스를 사용하는 것이 더 합리적일 수 있습니다. [변수와 상수의 차이점] 상수로 불변성 변수와 마찬가지로 값의 변경이 허용되지..

[Rust] 2023.07.17

[Rust] cargo

Cargo는 러스트의 빌드 시스템 및 패키지 매니저입니다. Cargo는 작성한 코드가 의존하고 있는 라이브러리를 다운로드 해주고, 코드와 라이브러리를 빌드해주는 등의 역할을 합니다. Rust 폴더에 카고를 이용해 새로운 프로젝트를 만들기 위해 다음과 같이 입력해줍니다. cd ~/Rust cargo new 프로젝트이름 --bin --bin은 라이브러리가 아닌 실행 가능한 형식의 파일(바이너리)로 만들어줍니다. 카고로 러스트 프로젝트를 만들게 되면 그 안에 Cargo.toml, src 디렉토리, git 디렉토리가 생깁니다. 깃 저장소를 자동으로 생성해줍니다. Cargo.toml은 프로젝트의 설정 파일로, 내부 구조는 다음과 같이 되어 있습니다. [package] name = "gussing-game" ver..

[Rust] 2023.07.16

[운영체제(OS)] 15-2) 파일 공유 - 가상, 원격 파일 시스템

운영체제가 여러 사용자를 수용하면 파일 공유, 네이밍, 보호가 중요해집니다. 디렉토리 구조가 사용자의 파일 공유를 허용하면 시스템은 파일 공유를 중재해야 합니다. 이를 구현하기 위해 시스템은 파일과 디렉토리에 대해 더 많은 속성을 가져야 하며, 소유자(owner, user)와 그룹(group)이 이와 같습니다. 사용자가 파일 연산을 요구할 때 사용자 ID를 소유자, 그룹 속성과 비교한 후 요구된 연산을 허가하든지 거부합니다. :Virtual File System. 실제 파일 시스템에 관계없이 공통된 인터페이스로 파일 시스템에 접근하도록 하는 계층입니다. 파일 시스템 구현은 아래 이미지와 같이 3가지 주요한 계층으로 구성됩니다. 1) 파일 시스템 인터페이스 : open(), read(), write(), ..

[운영체제(OS)] 15-1) 파일 시스템 - 파티션, 마운팅

: 범용 컴퓨터 시스템에는 여러 저장장치가 있을 수 있으며, 이러한 장치는 파티션으로 분할되어 볼륨을 보유하고 볼륨은 다시 파일 시스템을 보유합니다. * 다양한 유형의 파일 시스템 tmpfs : 휘발성 메인 메모리에 생성되는 임시 파일 시스템 objfs : 파일 시스템으로 보이는 커널 인터페이스로, 디버거가 커널 심볼에 접근할 수 있게 하는 가상 파일 시스템 ctfs : 시스템이 부트될 때부터 운영체제가 실행되는 동안 실행되어야 하는 프로세스를 관리하기 위한 "contract" 정보를 저장하기 위한 가상 파일 시스템 lofs : 한 파일 시스템 대신 다른 파일 시스템에 접근할 수 있게 해주는 loop back 파일 시스템 procfs : 모든 프로세스에 관한 정보를 파일 시스템 형태로 보여주는 가상 파일..

[Flutter] 렌더링 과정

일반적인 크로스 플랫폼 프레임워크는 안드로이드, IOS의 UI 라이브러리에 추상 계층을 만듭니다. 이 추상 계층은 UI표현을 위해 안드로이드와 IOS 각각의 시스템 라이브러리와 상호작용을 하는데, 이 때 상당한 오버헤드가 발생합니다. 플러터는 자체 고유의 위젯 세트를 사용하여 이러한 추상화를 최소화하고 있습니다. 또 엔진에 Skia(C/C++로 작성된 그래픽 엔진)의 복사본을 포함하고 있어 디바이스 OS의 버전이 낮아도 앱이 최신 성능을 낼 수 있게 해줍니다. 플러터 엔진이 시작되면 플러터 엔진은 GPU 하드웨어가 생성하는 VSync 신호를 받고, 위의 파이프라인과 같이 렌더링할 UI 스레드를 구동합니다. 1. UI Thread : 1~5단계를 수행합니다. 1) Animate : widget state ..

[Flutter] 2023.05.01

[운영체제(OS)] 14-2) 파일을 저장장치 공간에 할당

1. 연속 할당(Contiguous Allocation) : 각 파일이 저장장치 내에서 연속적인 공간을 차지하도록 요구합니다. 한 파일의 연속 할당은 첫 번째 블록 주소와 블록 단위의 길이로 정의됩니다. 순차 접근과 직접 접근 두가지 모두 지원할 수 있습니다. 순차 접근 : 파일 시스템은 가장 최근에 참조된 주소를 기억하고 있다가 필요할 때 다음 블록을 읽어들임 직접 접근 : 블록 b에서 시작하는 파일의 i번째 블록에 접근하기 위해 블록 b+i에 접근 파일의 가용 공간을 찾기 어렵습니다. 파일을 위해 어느 정도의 공간을 줄지 결정하는게 어렵습니다. 너무 작은 공간을 할당해줬을 경우, 다음과 같은 방법을 사용합니다. 확장이 안 될 경우 사용자에게 오류 메시지를 출력하고 프로그램을 종료시킴 보다 큰 공간을 ..

[운영체제(OS)] 공룡책으로 공부하는 운영체제 - 목차

전공자가 아닌지라, 기초 지식이 부족한 저는 그 유명하다는 공룡책으로 기초 지식을 쌓기로 했습니다. 정석대로 순서대로 가는 공부가 아닌, 필요하고 재밌어보이는 부분부터 공부할거라 순서가 조금 뒤죽박죽일 순 있습니다. 그래서 이 페이지에 링크를 걸어 순서를 정리해보고자 합니다. [part 1 개관] Chapter 1. 운영체제 개요 키워드 컴퓨터 시스템 기본 구성 부팅 매커니즘과 인터럽트(interrupt) Chapter 2. 운영체제 구조 운영체제 서비스 커널(Kernel)과 시스템 콜(System Call) [part 2 프로세스 관리] Chapter 3. 프로세스 프로세스의 개념과 PCB(Process Control Block) 프로세스 스케쥴링 컨텍스트 스위치 프로세스 연산(생성, 종료) 프로세스 ..

[운영체제(OS)] 14-1) 파일 시스템

다음 2가지 특성을 이유로 파일 시스템을 유지하기 위한 보조저장장치에 대부분 디스크가 사용됩니다. 디스크는 같은 블록에 재기록이 가능 디스크에 있는 임의의 블록의 정보를 직접 접근할 수 있음 쉽게 데이터를 저장하고 찾을 수 있게 되어 있으며, 여러 층으로 이루어져 있고 각 층은 낮은 층의 기능을 사용해 새로운 기능을 만들어 상위층에 제공합니다. 파일 시스템 구현을 위해 계층 구조를 사용하여 코드의 중복을 최소화 하였습니다. 1) 입/출력 제어(I/O control) : 장치 드라이버 루틴들과 인터럽트 핸들러로 이루어져 있고, 메모리와 디스크 시스템 간의 정보 전송을 담당합니다. 장치 드라이버는 번역기 역할을 하며, 입출력 제어기 메모리의 특정 위치의 특정 비트를 설정해서 제어기에 어느 장치에 어떤 일을 ..

반응형