목록CS 지식 (21)
하다보니
mvc 패턴은 왜 생겨났을까? mvc가 생겨나기 전, 과거의 프로그래머들이 수많은 프로그램들을 만들 때, 이 코드가 많아지면 많아질수록 코드가 복잡해져서 코드를 파악하기도 힘들고 나중에 기능을 수정할 때마다 대부분의 코드를 갈아엎어야 하는 경우가 많았다. 유지 보수가 힘들었다. 그러다가 프로그래머들이 유지 보수가 편한 코드 구성의 규칙성을 공식처럼 만들어서 논문으로 발표했고, 그렇게 프로그래머들 사이에서 mvc 패턴이 유명해졌다. 즉, mvc 패턴은 유지보수가 편해지는 코드 구성 방식이다. Model : 데이터와 관련된 부분 View : 사용자한테 보여지는 부분 Controller : Model과 View를 이어주는 부분 실전에서 어떻게 mvc를 지키며 코딩할 수 있을까. 1. model은 control..
정렬 알고리즘이 왜 중요한가? - 컴퓨터 분야에서 중요시되고 탐색에 용이하다. 프로그래밍과 알고리즘 이해에 많은 도움이 된다. - 버블 정렬 가장 기초, 인접한 두 요소를 비교해가면서 정렬을 하는 방식. 구현이 매우 간단함. 단점은 순서에 맞지 않는 요소들의 교환이 자주 일어나는 단점이 있다. 시간 복잡도는 최악과 평균 모두 O(n^2). 최선일 때는 O(n)이지만 자주 일어나지 않는다. - 선택 정렬 전체 범위에서 차례대로 가장 작은 숫자를 탐색하고, 가장 왼쪽부터 차례대로 교환하는 방식. 전체를 돌면서 최소를 구하고 가장 왼쪽 요소와 교환해준다. 장점은 자료 이동 횟수가 미리 결정된다는 것이다. 단점은 값이 같은 요소가 있다면 상대적인 위치가 변경될 수 있다. 같은 1이어도 정렬 이후에 이 순서가 달..
parameter는 매개변수. 함수 등 서브 루틴의 input으로 제공되는 여러 데이터 중 하나를 가리키기 위해 사용되는 변수의 한 종류. 서브루틴이란 하나 이상의 장소에서 필요할 때마다 반복해서 사용할 수 있는 부분적 프로그램이다. 변수의 한 종류이고, 값의 역할에 대한 정의이다. 역할에 대한 정의를 위해 선언하는 변수 argument는 전달 인자. 프로그램, 서브루틴 또는 함수 간 전달되는 값을 의미한다. 연산의 근거를 제공하기 위해 전달되는 값. 메서드 선언부에서 정의한 변수 -> Parameter 메서드 호출부에서 전달하는 값-> Argument 참고 : https://www.youtube.com/watch?v=fW1WGmj10rA&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOz..
교착상태. 일부 자원을 가지고 있으면서 상대방의 자원을 요구. Deadlock- 일련의 프로세스들이 서로가 가진 자원을 기다리며 block 된 상태. Resource(자원) - 하드웨어, 소프트웨어 등을 포함하는 개념. ex) memory space, semaphore 등. 프로세스가 자원을 사용하는 절차 Request-> Allocate -> Use ->Release Deadlock 발생의 4가지 조건. - Mutual exclusion (상호 배제) : 매 순간 하나의 프로세스만이 자원을 사용할 수 있음. - No preemption (비선점) : 프로세스는 자원을 스스로 내어놓을 뿐 강제로 빼앗기지 않음 - Hold and Wait(보유 대기) : 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유..
프로세스 동기화. concurrency control이라고도 부른다. (병행 제어) 세마포어는 P연산과 V연산으로 구성되는 추상 자료형. monitor. - 프로그래밍 언어 차원에서 공유 데이터에 접근하는 문제를 monitor가 해결해서 프로그래머의 부담을 덜어주는 것. 공유 데이터 접근시 접근하는 코드를 모니터에 정의해서 해당 코드로만 공유데이터에 접근할 수 있게 한다. 모니터는 active한 프로세스가 하나만이 공유데이터에 접근할 수 있게 해준다. 모니터를 쓰고 있던 프로세스가 다 쓰고 나가든지 잠들던지 하면 대기하던 프로세스가 들어온다. 모니터에선 lock이 필요없다. condition variable. 값을 가지는 변수가 아닌 어떤 프로세스를 잠들게 하고 줄세우게 하기 위한 변수이다. wait와 ..
Classical problems of shynchronization 1. bounded-buffer problem. - 버퍼의 크기가 유한한 환경에서 producer-consumer problem. 생산자 소비자 문제 발생. producer 프로세스와 consumer 프로세스 존재. 각각 여러개 존재. producer는 공유 버퍼에 데이터를 하나 만들어서 집어 넣는 역할을 한다. producer 1. empty 버퍼가 있는가?- 없으면 기다림. 2. 공유 데이터에 lock을 건다. 3. empty buffer에 데이터 입력 및 buffer 조작 4. lock을 푼다. 5. full buffer 하나 증가. consumer 1. full 버퍼가 있나요? - 없으면 기다림 2. 공유 데이터에 lock을 건..
Semaphores 추상 자료형이란 object와 operation으로 구성된다. 세마포어도 추상 자료형이다. 정수 값을 가질 수 있고 해당 정수 값이 자원의 개수라고 생각하면 된다. operation은 2가지 연산이 정의되어 있다. P연산과 V연산이 정의된다. 해당 연산은 공유자원을 획득하고 반납하는 것을 처리해준다. P연산은 세마포어 변수 값을 획득하는 과정이고 V연산은 다 사용하고 나서 반납하는 과정이다. lock을 걸고 푸는 방식은 semaphore 변수가 1인 경우를 생각하면 된다. P연산을 lock을 거는 과정 V연산은 lock을 푸는 과정이다. Semaphore S P(S): while(S
공유 데이터에 접근하는 코드를 critical section이라고 한다. critical section 문제를 해결하기 위한 해결법의 충족 조건 mutual exclusion(상호 배제) - 프로세스 p1가 critical section 부분을 수행 중이면 다른 모든 프로세스들은 그들의 critical section에 들어가면 안된다. progress(진행) - 아무도 critical section에 있지 않은 상태에서 critical section에 들어가고자 하는 프로세스가 있으면 critical section에 들어가게 해주어야 한다. Bounded Waiting(유한 대기) - 특정 프로세스 입장에서 critical section에 못 들어가고 지나치게 오래 기다리는 starvation이 생기지 ..
Round Robin은 cpu를 기다리는 시간이 사용하려는 시간에 비례해서 어느 정도 공정성을 보장한다. multilevel queue는 여러 줄로 선다. 위로갈수록 우선순위가 높다. 우선순위에 따라 cpu가 부여된다. ready queue를 여러 개로 분할(여러 줄) - foreground queue와 background queue가 있다. 각 큐의 특성에 맞는 스케줄링 방법을 적용해야 한다. - 우선 순위 높은 줄에 cpu를 준다. starvation이 발생할 수도 있다. - time slice : 각 큐에 cpu time을 적절한 비율로 할당. ex) 80%는 우선순위 높은 곳에 주고 20%는 우선순위 낮은 곳에 준다. foreground queue(interactive)- round robin을 ..
cpu scheduling algorithms - nonpreemtive(강제로 빼앗지 않는 방법)-비선점형 - preemtive(강제로 빼앗는 방법)- 선점형 성능 척도- performance index, scheduling criteria 시스템 입장에서 성능 척도. - cpu utilization(이용률) - 전체 시간 중에서 cpu가 놀지 않고 일한 시간 비율 - throughput(처리량) - 주어진 시간 동안 몇 개의 작업을 하느냐. 프로그램 입장에서 성능 척도 - 시간이 빨리 처리되는 것이 중요하다. - turnaround time(소요시간. 반환 시간) - cpu를 사용한 시간. 즉 특정 프로세스 수행 시간( cpu를 쓰러 들어와서 i/o 작업을 하러 나가기 전까지의 시간) - waitin..