Contents
[Swift Language Guide] String & Character
[Swift Language Guide] String & Character
2022.09.19String은 Character의 연속이다. String의 내용은 Character의 컬렉션을 비롯해 다양하게 접근이 가능하다. Swift의 String과 Character는 빠르고, Unicode에 순응하는 방식을 제공한다. 💡 String 타입은 Foundation 프레임워크의 NSString과 브릿지 되어있다. Foundation이 NSString에 정의된 메소드를 String타입에도 확장해 놓았기 때문에, Foundation을 import한다면 NSString으로 캐스팅 하지 않아도 해당 메소드들을 사용할 수 있다. / 참고: Bridging Between String and NSString String Literals 따옴표 사용 let someString = "Some string litera..
[Swift] COW(Copy-on-Write)
[Swift] COW(Copy-on-Write)
2022.08.24들어가며 Swift에서 값 타입과 참조 타입의 주요한 차이 중 하나는, 값 타입은 새로운 변수를 할당하거나 파라미터로 전달될 때 값 복사가 일어난다는 점이다. 다만, 이러한 복사 작업은 상당한 시간이 걸리므로 이런 작업을 최적화 하기 위한 기술이 바로 COW(Copy-on-Write)이다. "쓸 때 복사한다."라는 의미인데 COW가 어떤 방식으로 동작하는지, 또 Swift에서 어떤 타입에 구현되어있는지를 살펴본다. 실험 실험준비 아래와 같이 메모리 주소를 출력하는 함수를 정의하고 실험을 진행한다. UnsafeRawPointer는 Swift가 지원하는 포인터 타입 중 하나인데, 나중에 포스트를 통해 자세히 설명할 예정이다. 일단 객체의 메모리 주소를 나타내는 타입이라고 이해하자. func printAddr..
[운영체제](반효경) 8강. Deadlock
[운영체제](반효경) 8강. Deadlock
2022.08.09The Deadlock Problem DeadLock 일련의 프로세스들이 서로가 가진 자원을 기다리며 block된 상태 Resource(자원) 하드웨어, 소프트웨어 등을 포함하는 개념 ex) I/O Device, CPU cycle, memory space, semaphore 등 프로세스가 자원을 사용하는 절차(요청, 할당, 사용, 반납) Request, Allocate, Use, Release 데드락 예시 시스템에 2개의 테이프 드라이버가 있는데, 프로세스 P1과 P2가 각각 하나의 테이프 드라이버를 보유한 채 다른 하나를 기다리고 있을 때 Binary semaphores A and B Deadlock 발생의 4가지 조건 Mutual exclusion(상호 배제) 매 순간 하나의 프로세스 만이 자원을 사..
[운영체제](반효경) 7강. Process Synchronization
[운영체제](반효경) 7강. Process Synchronization
2022.08.09Process Synchronization 데이터의 접근 Race Condition 1) 공유 메모리를 사용하는 프로세스들 2) 커널 내부 데이터를 접근하는 루틴들 간(시스템콜) OS에서 언제 Race Condition이 발생하는가? 1. Kernel 수행 중 인터럽트 발생 시 inturrupt를 disable시켜서 해결. 순차적으로 하도록! 2. Process가 System call을 하여 Kernel mode로 수행중인데 context switch가 일어나는 경우 3. Multiprocessor에서 shared memory 내의 kernel data Process Synchronization 문제 공유데이터 shared data의 동시 접근 concurrent access는 데이터의 불일치 문제 in..
[운영체제](반효경) 6강. CPU Scheduling
[운영체제](반효경) 6강. CPU Scheduling
2022.08.09CPU Scheduling CPU and I/O Bursts in Program Execution CPU-burst Time의 분포 여러 종류의 job(process)들이 섞여있기 때문에 CPU 스케줄링이 필요하다. Interactive job에게 적절한 response 제공 요망 CPU와 I/O 장치 등 시스템 자원을 골고루 효율적으로 사용 프로세스의 특성 분류 I/O- bound process CPU를 잡고 계산하는 시간보다 I/O에 많은 시간이 필요한 job Many short CPU bursts CPU-bound process 계산 위주의 job Few very long CPU bursts CPU Scheduler & Dispatcher 운영체제의 특정 기능임 CPU Scheduler Ready ..
[운영체제](반효경) 5강. Process Management
[운영체제](반효경) 5강. Process Management
2022.08.09Process Management 프로세스 생성(Process Creation) Copy-on-write(COW) - write가 발생할때 Copy를 하겠다. 공유를 하다 자식의 내용이 수정되면 그때 부모의 Code Data Stack을 복사하겠다. 부모 프로세스가 자식 프로세스를 생성 프로세스의 트리(계층 구조) 형성 프로세스는 자원을 필요로 함 운영체제로부터 받는다. 부모와 공유한다 자원의 공유 공유하는게 좋으나 별개의 프로세스이기 때문에 독립적으로 가지고 있는게 원칙이다 부모와 자식이 모든 자원을 공유하는 모델 일부를 공유하는 모델 전혀 공유하지 않는 모델 수행(Execution) 부모와 자식은 공존하며 수행되는 모델 자식이 종료(terminate)될 때까지 부모가 기다리는(wait=blocked)..
[운영체제](반효경) 4강. Process(2)
[운영체제](반효경) 4강. Process(2)
2022.08.09Thread 💡 “A thread(or lightweight process) is a basic unit of CPU utilization” Thread의 구성 Program Counter Register Set Stack Space Thread가 동료 Thread와 공유하는 부분***(=Task)*** Code Section Data Section OS Section 전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다. 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked(wating) 상태인 동안에도 동일한 태스크 내의 다른 쓰레드가 실행(Running)되어 빠른 처리를 할 수 있다.(=비동기처리?) 동일한 일을 수행하는..
[운영체제](반효경) 4강. Process(1)
[운영체제](반효경) 4강. Process(1)
2022.08.09프로세스 프로세스의 개념 💡 “Process is a program in execution” - 프로세스는 실행중인 프로그램이다. 프로세스의 문맥(Context) CPU 수행상태를 나타내는 하드웨어 문맥 Program Counter 각종 Register 프로세스의 주소공간 code, data, stack 프로세스 관련 커널 자료 구조 PCB(Process Control Block) Kernel Stack 프로세스의 상태(Process State) *본 수업은 CPU가 1개인 컴퓨터를 기준으로 설명함 프로세스는 아래와 같은 상태가 번갈아가며 수행된다. Running CPU를 잡고 instruction을 수행중인 상태 Ready CPU를 기다리는 상태(메모리 등 다른조건을 모두 만족한) Bloacked(wa..
[운영체제](반효경) 3강. SystemStructure & Program Excution(2)
[운영체제](반효경) 3강. SystemStructure & Program Excution(2)
2022.08.09컴퓨터 시스템 구조 동기식 입출력과 비동기식 입출력 1. 동기식 입출력(synchronous I/O) I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감 구현방법 1 I/O가 끝날 때까지 CPU를 낭비시킴 매시점 하나의 I/O 만 일어날 수 있음 구현방법 2 I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음 I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움 다른 프로그램에게 CPU를 줌 2. 비동기식 입출력(asynchronous I/O) I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감 보통 Wirte 작업들은 비동기식으로 이루어짐(완료됐는지 확인이 필요가 없을때) → 구현하기 나름이다 💡 두 경우 모두 I/O의 완료는 인..
[운영체제](반효경) 3강. SystemStructure & Program Excution(1)
[운영체제](반효경) 3강. SystemStructure & Program Excution(1)
2022.08.09컴퓨터 시스템 구조 CPU가 매 클럭 사이클마다 메모리에 있는 기계어(4바이트정도의 인스트럭션)를 하나씩 처리 CPU는 프로그램 카운터가 가리키고 있는 메모리주소를 계속 읽는역할만 함 하드디스크는 보조기억장치면서 I/O 디바이스의 역할도 동시에 수행한다. 보통 CPU는 메모리랑만 이야기하지만 I/O랑 이야기할수도(이때 사용되는게 device controller) Mode Bit - 이 프로그램이 운영체제인지 어떤사용자프로그램인지? Register - 메모리보다 빠른 공간 Interrupt line - CPU가 라인 하나를 실행할 때마다 Interrupt가 있는지를 체크 timer - 특정 프로그램의 CPU의 독점을 막는 역할(시간이 끝나면 interrupt를 검 - CPU가 인스터럭션을 실행하다가 int..
CoreML이란? 간단한 글자인식 앱 만들기
CoreML이란? 간단한 글자인식 앱 만들기
2022.06.22iOS에서 머신러닝을 사용할 수 있게 해주는 CoreML 프레임워크에 대해 알아보자. Overview CoreML 프레임워크는 머신러닝 알고리즘을 training data에 적용하여 Model을 만든다. 이 Model을 사용하여 개발자는 새로운 input data에 대해 prediction을 만들어 낼 수 있고 우리가 코드로 작성하기 어렵거나 비현실적인 작업을 성취해 낼 수 있다. 예를들어, 사진을 분류하거나 특정한 대상이 포함된 사진을 찾아내는데 사용된다. 모델을 만들면, 모델을 앱에 통합하고 사용자의 기기에 배치한다. 앱은 CoreML API와 user data를 사용해서 prediction을 도출하거나, 모델을 훈련시키거나, 모델의 미세한 조정을 할 수 있다. 2가지 방법으로 모델을 사용할 수 있는..
[WWDC22] Bring your world into augmented reality(AR)
[WWDC22] Bring your world into augmented reality(AR)
2022.06.09WWDC22 애플의 개발자 컨퍼런스인 WWDC가 6.7~6.11일 5일간 진행된다. 예정된 세션을 훑어보니 (https://developer.apple.com/wwdc22/sessions/) 새로운 기능인 actor와 concurrency(async&await)에 대한 주제들이 대다수를 차지하고 있다. 해당 내용의 공부는 아직 시기상조인 것 같아, 그 외에 흥미로운 몇몇 주제들로 포스팅을 해보고자 한다. 첫번째 포스팅은 요즘 관심이 가는 기술인 증강현실(AR)에 대한 세션이다. Object Capture Object Capture는 기술은 현실 세계에 존재하는 대상의 이미지를 3D모델링으로 옮길 수 있게 하는 Computer Vision 기술이라고 한다. 아이폰을 비롯한 애플기기나 DSLR 카메라를 이용..