리눅스 파일에는 atime, ctime, mtime 3가지 시간 정보가 있다.각각 Access Time, Change Time, Modify Time을 의미한다. 파일의 메타데이터 정보를 보여주는 stat() 명령어를 공부하다가 세 가지 시간 정보가 등장하는 것을 확인했다. atime (Access Time)파일에 마지막으로 접근 Access한 시간을 기록한다.time of last access 파일이 어떤 명령어나 스크립트, 프로그램에 의해 열리거나 읽혔을 때 갱신된다.vi나 emac 같은 에디터 프로그램 뿐만 아니라 cat, tail 같은 명령어에 의해 읽힌 경우에도 갱신된다. Access Time은 너무 자주 갱신이 된다. 파일에 접근할 때마다 inode에 갱신해주어야 하기 때문에 애플리케이션의 성..
SKKU SW
비동기함수 sync, 동기함수 fsync 유닉스(리눅스)에서는 메모리 정보를 disk에 적을 때 바로 disk에 적지 않고,CPU 바로 옆에 있는 cache에 적은 다음 그 정보를 disk로 옮긴다. sync 또는 fsync 시스템 콜을 이용해서 write를 할 수 있는데, sync는 비동기함수이기 때문에 write 명령을 CPU에 전달하고 리턴된다. void sync(void); // 항상 성공하므로 반환 값이 없다.단순히 모든 버퍼를 디스크에 쓰도록 처리하는 과정을 시작하도록 명령할 뿐그 버퍼 내용을 디스크에 쓰는 연산이 완료될 때까지 기다리지는 않는다. 반면, fsync는 동기함수로, write가 끝날 때까지 기다렸다가 리턴된다.(disk 끝까지 내려가서 써지는 거 확인하고 return) int f..
conditional variable을 사용하여 producer-consumer (Bound buffer) problem을 해결하는 과정에서 pipe라는 용어가 나왔고는데,추가적인 공부를 위해 anonymous pipe와 named pipe를 알아보려 한다. 일단 anonymous pipe와 named pipe 둘 다 프로세스 간 통신 (IPC, Inter-Process Communication) 방법 중 하나로,데이터를 전달하는 데 사용된다. Anonymous pipe특징1. 일회성 연결: 주로 부모 프로세스와 자식 프로세스 간의 통신을 위해 사용된다.2. 단방향 통신: 한쪽 방향으로만 데이터가 흐른다.데이터 송신과 수신을 위한 별도의 파이프가 필요하다.3. 익명성: 시스템 내에서 이름이 없으므로 파일..
어떻게 하면 네트워크 통신을 할 수 있는가?백그라운드 쓰레드로 뒤에서 작업을 해야 함-> 네트워크 통신을 백그라운드 쓰레드로 보내고화면 반영을 UI 쓰레드로 바꿔줘야 함 Coroutine을 통해 어떻게 하면 쓰레드 번갈아가면서 네트워크 통신할 수 있는지 Coroutine?코루틴이란비동기 실행 코드를 간소화하는 설계 패턴코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다.UI 쓰레드과 백그라운드 쓰레드를 우리가 지정해서 사용할 수도 있다는 편의성이 있다. http를 사용하려면 먼저build.gradle (:app) 파일에 두 가지를 작성해 주어야 한다.implementation 'com.squareup.okhttp3:okhttp:4.9.0'im..
(사진 출처: https://www.researchgate.net/figure/Internet-Service-Provider-Hierarchy-The-above-diagram-Figure-illusrtates-the-structure_fig2_342330646) 라우터들은 hierarchical한 구조를 가지고 있으며, tier로 구분된다.위에서부터 T0, T1, T2, ... 이렇게 내려오고national (top tier), regional, local tiers 순이다. 가장 아래 End-users는 local ISP(KT, SK, LG..)에 연결되며 stub로 분류한다.상위 router들은 transint다.The OSPF RFC (2328) in section 2.1 states: “Trans..
What is Kotlin?- Cross-platform,- statically typed(정적타입 언어),- JVM-targeted programming language Built-in null safety support정적 타입 언어: 컴파일 시 변수의 타입이 설정되고, 그 이후로 타입은 변화하지 않는다.동적 타입 언어: 런타임에 변수의 타입이 결정된다. kotlinlang.org온라인 코틀린 컴파일러 Basic syntaxkotlin은 ; 사용하지 않음같은 줄에 multiple statement 작성할 때만 세미콜론(;) 사용ex)val mynumber = 10; println(mynumber) variable declaration1. val: read-only local variablescan b..
Multi core -> Multiprocessor Thread 개념을 이용해 parallel programming을 해야 한다. (Multithreading) Cache Coherence : Multicore 환경에서 각 CPU Core에는 개별적인 Cache가 존재하고, 이 Core들은 공통된 Bus를 통해 Memory에 접근하는데, 이때 각 Core Cache, 그리고 Main Memory 사이에서 Data들의 Consistency를 어떻게 유지할 것인가? Bus snooping https://gusdkstudyhard.tistory.com/139 [OS] Multiprocessor Scheduling(1) - Cache Coherence(캐시 일관성) & Bus snooping(버스 스누핑) Si..
Single Core 환경은 (CPU - Cache) ----- Memory 형태로 되어 있다. Cache는 Main Memory보다 용량은 작지만, 주요 data들을 모아 둔 작고 빠른 임시저장장치이다. 이 Cache를 이요함으로써 CPU와 Memory 간의 다소 느린 속도를 보완해줄 수 있다. 그렇다면 Multi Core는 어떨까 (CPU - Cache) ----- |----- Memory (CPU - Cache) ----- 와 같은 형태일 것이다. (core는 더 많을 수도 있다) 이 경우에 문제가 복잡해진다. CPU1에서 CPU2로 작업을 옮기려면 CPU2에서 다시 필요한 정보를 Memory에서 Cache로 가져오고, 또 Context Switch가 발생하면 CPU1의 Cache로 필요한 정보를 ..