전체 글

백수를 탈출하기 위해 공부중입니다
System ArchitectureI/O DevicesInterface시스템 소프트웨어가 그 운영을 제어할 수 있도록 한다.모든 하드웨어 장치들은 특정한 상호 동작을 위한 인터페이스와 프로토콜을 가진다.Internal structure구현 세부 사항에 따라, 시스템에게 제공하는 장치에 대한 추상화를 정의하는 책임을 가진다.Protocol: 표준 방식while (STATUS == BUSY); // 장치가 바쁜 상태가 아닐 때까지 대기데이터를 Data 레지스터에 쓰기명령어를 COMMAND 레지스터에 쓰기(그러면 장치가 명령어를 실행한다.)while (STATUS == BUSY); // 요청을 처리하여 완료할 때까지 대기Polling운영체제가 데이터 레지스터에 어떤 데이터를 전달운영체제가 명령 레지스터에 명령..
비 교착 상태 오류원자성 위반 오류( atomicity violation )다수의 메모리 참조 연산들 간에 있어 예상했던 직렬성이 보장되지 않았다. 즉, 코드의 일부에 원자성이 요구되었으나, 실행 시에 그 원자성이 위반되었다.**[MySQL]**Thread 1:if (thd->proc_info) { ... fputs(thd->proc_info, ...); ...}Thread 2:thd->proc_info = NULL;thd 자료 구조의 proc_info필드를 두개의 다른 쓰레드가 접근한다.Thread 1: 값이 NULL인지 검사후 값을 출력Thread 2: 값을 NULL로 설정만약 스레드 1이 체크(즉, if)를 수행한 후 fputs()를 호출하기 전에 인터럽트가 걸리면, 스레드 2가 그 사이에 실행되어..
세마포어란?🌼 동기화 기법 🌼세마포어는 락과 컨디션 변수로 모두 사용할 수 있다. 정수값을 갖는 객체로서 두 개의 루틴으로 조작가능(초기화 포함은 3개)세마포어는 초기값에 의해 동작이 결정된다. ➡️ 사용하기 전에 제일 먼저 값을 초기화 해야함 POSIX semaphores- int sem_init(sem_t *s, int pshared, unsigned int value)  두번째 인자는 모든 예제에서 0이다. ➡️ 이 값은 같은 프로세스 내의 쓰레드 간에 세마포어를 공유한다는 것을 의미  0이 아니라면 세마포어는 프로세스 간에 공유되며, 공유 메모리 영역에 위치해야 한다.- int sem_wait(sem_t *s)  세마포어 값이 1이상이면 함수는 즉시 리턴, 아니면 값이 1이상이 될 때까지 호출..
조건을 기다리는 방법어떤 조건이 참이 되기 전까지 스레드가 대기하는 것이 필요하다.물론 조건이 참이 될 때까지 단순히 반복할 수 있지만 ⇒ CPU 사이클을 낭비volatile int done = 0;void *child(void *arg) { printf("child\\n"); done = 1; return NULL;}int main(int argc, char *argv[]) { pthread_t c; printf("parent: begin\\n"); pthread_create(&c, NULL, child, NULL); // create child while (done == 0); // 회전 printf("parent: end\\n"); return 0;}..
진짜 어렵다... 밑에 있는 책을 꼭 읽어보길 추천...책이 정말 잘 설명해준다.. 근데 난 이해 못하겠다..ㅎㅎ자료구조에 락을 추가하는 방법?자료구조에 락을 추가하여 thread safe하게 만들 수 있따.  Correctness : 어떻게 락을 추가하고 올바르게 추가하려면 어떻게 해야할까?  Concurrency : 데이터 구조가 높은 성능을 제공하고, 많은 스레드가 동시에 구조에 접근할 수 있도록 잠금을 추가하는 방법은 무엇인가?Simple Counter (Without Locks)typedef struct __counter_t {int value;} counter_t;void init(counter_t *c) {c->value = 0;}void increment(counter_t *c) {c->v..
락: 기본 개념balance = balance + 1;lock_t mutex; // 글로벌 변수로 선언된 락 …lock(&mutex);balance = balance + 1;unlock(&mutex);소스 코드의 임계 영역을 락으로 둘러서 그 임계 영역이 마치 하나의 원자 단위 명령인 것 처럼 실행되도록 한다. [ 락의 상태 ]사용가능( available, (unlocked or free)): 어느 쓰레드도 락을 갖고 있지 않는 것사용중(acquired) : 즉, 임계 영역에서 정확히 하나의 쓰레드가 락을 획득한 상태lock()호출을 통해 락 획득을 시도한다.만약 어떤 쓰레드도 락을 갖고 있지 않으면, 그 쓰레드는 락을 획득하여 임계영역 내로 진입⇒ 진입한 쓰레드 : 락의 소유자(owner)다른 스레드는..
· TypeScript
1. 카카오 API https://apis.map.kakao.com/카카오 API 사이트에서 키발급하기를 누른다. 애플리케이션 추가하기를 누른다. 뜨는 창에 애플리케이션 정보를 입력하면 끝 😚 만들어진 애플리케이션을 클릭하여 쓰여진 정보를 입력하고, 플랫폼 등록을 하면된다. 임시적으로 플랫폼 주소는 http://localhost:3000으로 지정하면 된다. 아래 카카오 지도 가이드를 참고 하면 된다. [카카오 지도 가이드] https://apis.map.kakao.com/web/guide/ 2. React + TypeScript에서 카카오맵 이용하기1. 우선 발급 받은 key를 .env파일을 만들어 넣어준다. env 파일이란?포트, DB관련 정보, API_KEY등의 환경변수 파일이다. 주로 오픈소스에 올..
· React
일부 모자이크 처리를 했다. 맥북을 초기화하고 VScode를 다시 설치한 후에 발생한 오류이다. Ctrl + s ( 저장 ) 을 누를 때 마다 위의 오류가 계속 발생 했다.  [ 시도한 방법 ]  1. 터미널을 두번 껏다 키니까 해결터미널을 한번 켰다 켰을 땐 또 안되고, 그러나 두번 껏다 키면 됨 => 저장후 항상 두번 껏다 켜야하기에 굉장히 귀찮음. 해결은 됨. 2. Package.json을 켜서 저장하면 오류가 해결되긴 함, 근데 이것도 저장 할 때마다 귀찮음. 항상 열어서 컨에스를 누르는 귀찮음이 생긴다. 3. Package.json 에서 eslintConfig 부분 삭제"eslintConfig": { "extends": [ "react-app", "react-app/jes..
· CodingTest
문제 상근이는 변의 길이가 1인 정사각형 n개를 가지고 있다. 이 정사각형을 이용해서 만들 수 있는 직사각형의 개수는 총 몇 개일까? 두 직사각형 A와 B가 있을 때, A를 이동, 회전시켜서 B를 만들 수 없으면, 두 직사각형은 다르다고 한다. 직사각형을 만들 때, 정사각형을 변형시키거나, 한 정사각형 위에 다른 정사각형을 놓을 수 없다. 또, 직사각형은 정사각형으로 꽉 차있어야 한다. 코드 n = int(input()) # cnt = 직사각형의 개수 cnt = 0 for i in range(1,n+1): for j in range(i, n+1): if i*j
· CodingTest
문제 앨버타의 자동차 번호판은 ABC-0123 (세 글자, 네 숫자)와 같이 두 부분으로 나누어져 있다. 좋은 번호판은 첫 번째 부분의 가치와 두 번째 부분의 가치의 차이가 100을 넘지 않는 번호판이다. 글자로 이루어진 첫 번째 부분의 가치는 글자를 26진법 수처럼 계산한다. (각 자리가 [A..Z]) 예를 들어, "ABC"의 가치는 28 (0×262 + 1×261 + 2×260)이 된다. "ABC-0123"은 |28 - 123| ≤ 100 이기 때문에, 좋은 번호판이다. 자동차 번호판이 주어졌을 때, 좋은 번호판인지 아닌지를 구하는 프로그램을 작성하시오. 코드 N = int(input()) for _ in range(N): l,d = input().split("-") sum = 0 for i in r..
unemployedMan
백수탈출기