블로그

예진안

인프런 워밍업 클럽2 cs <day13>

알고리즘퀵정렬퀵정렬은 병합정렬과 같이 분할 정복 알고리즘으로~재귀를 사용한다.피벗 : 첫 피벗은 첫번째 인덱스left, right : 각자 왼쪽 오른쪽 끝에 있는 것rightStartIndex : 왼쪽으로 이동, 피벗보다 작은 값을 만나면 멈춘다.leftStartIndex : 오른쪽으로 이동, 피벗보다 큰 값을 만나면 멈춘다.rightStartIndex와 leftStartIndex가 조건에 의해 멈췄을 때 두값을 스왑하여 바꾼다.rightStartIndex와 leftStartIndex가 지나칠 때 멈춘다. rightStartIdnex값과 피벗 위치를 바꿔 피벗은 5, rightSI는 4가된다.-> 피벗을 기준으로 왼쪽은 피벗보다 작은 값, 오른쪽은 피벗보다 큰 값으로 나뉘게되고나눠진 그 배열을 또 위에서 정렬한 것처럼 반복피벗을 기준으로 배열을 반으로 나눈다 -> O(log n) 이작업을 데이터 n개만큼 반복해야하므로 n을 곱한다. -> O(nlog n)최악의 경우 : 피벗이 가운데가 아니고 한쪽으로쏠림 -> O(n^2)근데 평균성능보는거라 Θ(nlogn) Θ는 세타병합이랑 퀵이랑 비교했을 때 병합이 더 좋아보이지만 퀵은 적은비교 적은 메모리사용으로 퀵이짱인것이다~ 운영체제주변장치내부구조를 보자면...레지스터들 : 입출력 작업 시에 데이터를 저장하는 역할 이 값들은 메모리에 이동되기도 한다.세가지 버스를 따로 받을 수있다. Address, Data, Control캐릭터 디바이스와 블록 디바이스 데이터 전송단위가 캐릭터(글자)이거나 블록 단위캐릭터 디바이스 특 : 데이터 전송단위가 캐릭터로 상대적으로 작다. 마우스,키보드블록 디바이스 특 : 데이터 전송단위가 블록단위로 캐릭터보다는 크다. 하드디스크 ,ssd 주변 장치들은 메인보드 내의 버스로 연결된다. 하나의 버스였지만 I/O작업을 수행하기위해서 입출력 제어기와 여러 개의 버스가 추가됐다.(CPU가 I/O 작업때문에 다른작업을 못했기때문)CPU는 I/O작업을 만나면 입출력 제어기에게 입출력 작업을 맡기고 다른 작업을 실행하러간다.입출력제어기 - 시스템버스와 입출력 버스로 구분 시스템버스는 CPU, 메모리가 사용하고 입출력 버스는 주변장치들이 사용입출력버스 - 고속입출력, 저속입출력->속도차이로인한 병목현상을 해결그래픽카드는 주변 장치이지만 대용량의 작업을 실행하기때문에 시스템 버스를 사용한다.입출력 제어기는 여러 주변장치를 처리하는데 입출력 버스에서 온 데이터를 메모리로 옮겨야한다. -> 입출력 제어기가 메모리 접근을 위해 CPU를 거쳐야되는데 CPU 도움없이 DMA제어기를 추가시켰다.Direact Memory Access : cpu없이 입출력 제어기가 메모리에 접근할 수있도록 한다.Memory Mapped I/O : cpu와 DMA 제어기가 사용하는 메모리 영역을 나눠 혼돈을 막는다.마우스광학마우스 , 키보드아래 카메라를 통해 초당 1500회를 찍어 디바이스 컨트롤러 안 DSP로 보낸다.x,y 축 좌표 움직임을 캐치한다.DSP가 움직임과 클릭을 감지했을 때 cpu에게 인터럽트를 발생시켜 마우스 드라이버가 동작해 데이터를 읽어간다.마우스 드라이버는 운영체제에게 이벤트 신호를 주고 운영체제는 이 이벤트를 foreground 애플리케이션으로 전달해준다.해당 애플리케이션은 받은마우스 이벤트를 처리한다. 하드디스크하드시스크 구조플레터 : 플레터는 여러개의 트랙으로 구성되었고 표면을 자성을 띈다. n극일경우 0, s일경우 1스핀들 : 플레터 자기화된 원판으로 이뤄졌다. 디스크암이 읽기/쓰기 헤드로 플레터의 표현을 read헤드 : 헤드는 여러 개 있고 항상 같이 움직인다. 이 헤드들은 여러 개의 플래터를 가리키게 된다.실린더 : 여러개의 같은 집합의 플래터에 있는 트랙의 집합을 실린더라고한다.트랙 : 여러 개의 섹터로 나뉜다.섹터 : 하드디스크의 가장 작은 단위유저프로세스가 하드 디스크의 특정 섹터에 접근하고 싶어서 이러한 요청을 보낸다.실린더 c로 가서 트랙 b에 있는 섹터 d를 읽어라seek : 디스크암은 헤드를 실린더 c로 이동seek time : 헤드를 실린더로 이동시키는데 시용하는 시간 트랙b의 섹터가 d 가 헤드에 닿을 때가지 스핀들ㅇ르 회전시키고 헤드에 섹터d가 읽히면 작업이 끝난다.다른 전자 기기 작업시간은 ns 단위지만 헤드 이동시간은 ms라 하드디스크가 느리다. 플레시 메모리(ssd)와 하드디스크자성을 띄는 하드디스크는 자석을 가져다대면 망가지지만 플레시 메모리는 그러지 않고 전기적으로 데이터를 읽어 조용하다.스핀들과 같은 회전축때문에 충격에 약한 하드디스크ssd 단점 : 특정 지점에 데이터를 썼다면 덮어쓰기가 불가능하다. 똑같은 지점에 데이터를 쓰고 싶으면 지워야하지만 메모리 지우기 기능 횟수가 정해져있다. ->똑같은 구간에 지우기 쓰기를 여러 번할 경우 망가질 수있다.    

알고리즘 · 자료구조알고리즘운영체제인프런워밍업클럽2cs

예진안

인프런 워밍업 클럽2 cs <day8>

알고리즘정렬 : 배열을 가지고 하는 알고리즘 버블 정렬, 선택정렬 -> O(n*n)버블정렬첫번째 배열의 수(a)와 다음 수(b)와 비교하여 a>b일 시 b와 교체되고 작은 수는 정렬된 배열이기 때문에 나중에 비교대상이 아니게 된다. 선택정렬정렬되지 않은 첫번째 배열안의 원소 값과 그다음 배열안 원소~끝까지 다 비교하고 첫번째보다 작을 경우 자리를 바꿔 정렬  운영체제메모리레지스터 : 메모리중 속도가 가장 빠르고 값도 비싸다.캐시메모리 : 느린 RAM과 빠른 레지스터 중간에서 레지스터가 필요할 데이터를 미리 보기 좋게 저장한다.RAM : 실제로 프로세스들이 올라가서 작업하는 공간보조저장장치 : 메모리 중에서 효율이 제일 좋은 유일한 비휘발성 메모리메모리와 주소물리 주소 : 메모리의 실제 주소논리 주소 : 사용자 입장에서의 주소 사용자는 실제 물리주소를 알 수 없기 때문에 실행될 주소를 0번지라고 가정하고 프로세스를 작업한다. 물리주소를 일일히 신경쓰지 않고 프로그램 개발물리주소로는 0x2000번지이지만 논리 주소로는 0x0번지라고 인지된다.RAM은 항상 운영체제 영역과 사용자공간을 따로 빼놓는다.이때 사용자 공간에서 운영체제 영역을 침범하면 안되기 때문에 ->? 왜여?경계레지스터를 사용해서 선을 긋는다.경계레지스터 : 메모리 관리자가 사용자 프로세스가 경계 레지스터 값을 넘어갔는지 확인 넘어갔다면 해당 프로세스를 정지 시켜버린다. CPU에 있다.메모리를 가져오는 방식사용자 : ㅌㅌㅌ번지 데이터가져와.-->CPU : 응 알겠어~ ㅌㅌㅌ번지 데이터~. 메모리관리자야~ ㅌㅌㅌ번지 데이터좀~ --> 메모리관리자 : ㅌㅌㅌ번지 데이터? 음~ 재배치 레지스터엔 물리주소를 xxxx를 가리키는 번지네 알겠어~ xxxx번지데이터 보내줄게~메모리 할당 방식가변 분할 방식 : 메모리에 프로세스가 들어올 때 프로세스 크기에 맞게 메모리에 할당 시킨다.연속된 메모리에 프로세스 할당외부단편화 발생 고정 분할 방식 : 메모리에 프로세스에 들어올 때 정해진 크기에 맞게 프로세스를 잘라 메모리에 할당 시킨다.단순하고 오버헤드가 없다.내부단편화 발생외부단편화 : 순서대로 프로세스가 할당되고 프로세스a와 프로세스b가 작업을 마친상태. 60mb짜리 프로세스가 들어올 때빈공간이 총 60mb이지만 고정분할 방식이 아니기때문에 많은 양의 손실이 생긴다.해결 방법 : 조각모음 조각모음으로 메모리에 들어있는 프로세스를 멈추고 하나하나씩 땡겨서 이동시킨다. ->오버헤드 발생내부단편화: 낭비공간이 쪼그만한하게 생기는 현상 해결방법 : 버디시스템 메모리를 2승수단위로 쪼갠 후 할당하는 방식 (2048바이트를 1024바이트 두개로, 1024바이트를 512바이트두개로, 512바이트를 256바이트 두개로 ....)들어가야할 프로세스 크기에 알맞는(프로세스크기보다 크지만 낭비가 제일 적은) 메모리에 할당시켜서 최소한의 낭비를 줄인다. -> 내부단편화가 생겨도 전보다는 덜하다!어제 복습 블로그 글올렸어야했는데 ㅜㅜ 오늘 하니까 드문 기억만 나네

알고리즘 · 자료구조알고리즘운영체제인프런워밍업클럽2cs

채널톡 아이콘