본문 바로가기

컴퓨터 일반

(28)
자료구조 그래프 정리 자료구조는 내가 저장하려는 데이터를 효율적으로 저장하고 관리하는 방법이죠, 어떻게 하면 적은 메모리를 사용해서 데이터를 저장하고 관리할 수 있을까?에 관한 것입니다.자료구조의 선택은 실행 성능의 향상을 기대할 수 있게 합니다.비선형 자료구조의 하나인 그래프에 대해 알아보겠습니다. (1)트리와 그래프 차이같은 비선형 자료구조의 트리 자료구조는 여러개의 노드가 있다면 부모에서 자식 관계로 이루어진 자료구조 였습니다. 부모, 자식 관계로 이루어진 자료구조이며 단방향 그래프의 한 종류입니다.a->b 이동은 가능하지만 b->a의 이동은 불가능합니다. 즉, 경로는 단 하나만 존재할 수 있습니다. 반면에 그래프는 노드가 있다면 트리처럼 단방향으로만 이루어지는게 아닌, a->b / b->a 모두 가능합니다.어떤 방향으..
프로그래밍언어 문제(2) C언어에서 배열이 A(3,4)로 선언되었다.배열의 시작주소가 200일 때A(1,3)의 주소는 얼마인가? A(3,4)는 3행 4열이므로200 (0,0)(0,1)(0,2)(0,3)(1,0)(1,1)(1,2) (1,3) (2,0)(2,1)(2,2)(2,3)A(1,3)의 주소는 207이다. 공식을 사용하여 주소를 구할수도 있다.위치가 (i,j)이고 크기가 (K,L)일때 행 우선이라면 L * i + j = 7207이 된다 main 함수를 찾는다정수형 변수 a,b와 배열 c가 선언되어 있다a에는 20, b에는 20, c[0]에는 20을 준다abc 202020  func(&a, b, c);를 호출한다&a는 주소값, b는 값, c는 주소값이 들어간다 위에서 만들어진 func() 함수를 보면x = *a; //a가 가진 ..
프로그래밍언어 문제(1) main 함수가 어디에 있는지 본다변수를 정리한다. a는 정수를, c와 d는 실수를 담는 변수이다3.5를 3에 대입하면, a는 정수형 변수이기에 3이 된다3을 c에 대입하면, c는 실수형 변수이기에 3.0이 된다.d는 연산자 우선순위에 따라 a/2를 먼저 하고 (3/2=1) 3+1+3.0 = 7.0이 된다acd33.07.0 main 함수가 어디에 있는지 본다, main에서 func(i)를 호출하는 문제이다.main에서 i를 선언했고, 5부터 시작해서 0이상일 때까지 반복한다 i는 1씩 감소한다.2로 나눴을때 나머지가 1이라면 func(i) 함수를 호출한다.함수 func(5)는 num이 1이 아니니까 return 5 * func(4)func(4)는 num이 1이 아니니까 return 4 * func(3) ..
페이지 교체 알고리즘 문제 1. 페이지 프레임의 수가 4이고 가상 페이지의 수가 8인 가상 메모리에서 선입선출(FIFO) 페이지 교체 정책이 사용된다. 페이지 참조 열이 0 1 7 2 3 2 7 1 0 3 이라면 페이지 부재와 교체 횟수는 무엇인가?가장 오래된 페이지를 교체한다 / 페이지 프레임을 본다맨 윗줄은 참조 프레임이고 아래는 페이지 프레임임페이지 교체 횟수는 2 페이지 부재 횟수는 601723271030000333333 111111100  77777777   2222222FFFFF, 교체   F,교체   2. 페이지 교체 알고리즘으로 FIFO, LRU 알고리즘을 사용하고 페이지 참조 순서가 다음과 같을때,할당된 프레임의 수가 3개일때 각 알고리즘에서 발생하는 페이지 부재 횟수는?페이지 참조 순서 : 3 1 2 4 1 4 ..
운영체제론 복습(2) 가상 메모리실행중인 프로세스에 의해 조회되는 주소를 가상 주소라 하고, 주기억장치에서 이용 가능한 주소를 실 주소라 한다. 프로그래머나 사용자들이 디스크의 커다란 메모리 공간을 가상메모리로 인식하고 이를 이용하여 메모리의 부족함 없이 다중 프로그래밍 환경을 실현하는 기법이다공간이 없어도 부분적 적재가 가능하여 많은 작업을 실행시킬 수 있으므로 프로세서의 이용률과 처리율은 향상될 수 있다응답 시간은 느려진다물리적 주소 공간과 논리적 주소 공간으로 분리한다 -> 매핑 과정이 필요하다 (맵 테이블)   TLB는 가상메모리를 효과적으로 제공하기 위한 장치이다  동적 주소 변환이란 프로세스 실행 중 가상 주소를 실주소로 변환하는 것이다프로그램의 크기는 주기억장치 용량보다 커도 실행할 수 있다프로세스에서 사용되는 ..
운영체제론 복습(1) 운영체제는 하드웨어와 응용 프로그램 사이에 존재하며 프로그램을 위한 프로그램이다하드웨어 -> 운영체제 -> 응용 프로그램 -> 사용자 순서로 연결된다 프로세스란 실행 중인 프로그램이다. 프로그램 코드 외에도 현재의 활동 상태를 갖는다생성 상태는 프로세스의 작업 공간이 메인 메모리에 생성되고 운영체제 내부에 프로세스의 실행정보를 관리하기 위한 프로세스 제어 블록(PCB)가 만들어진다준비 상태는 프로세스가 CPU 할당을 기다리는 상태이다, 단일 프로세서 시스템에서 여러 개의 프로세스들이 동시에 이 상태에 있을 수 있다.실행 상태는 프로세스가 CPU를 할당 받아 작업을 수행하고 있는 상태로, 단일 프로세서 시스템에서는 오직 하나의 프로세스만 이 상태에 있을 수 있다다중 처리기 시스템에서는 실행 상태의 프로세스..
프로그래밍(4) C언어 포인터, 배열 포인터포인터란 주소의 주소입니다오늘 길동이 집으로 모여, 그 길동이가 변수라고 생각하면 돼요.야, 서울시 oo동 oo번지로 모여 이렇게 말할 수도 있습니다c언어는 이렇게 주소를 사용할 수 있고 주소를 담을 수 있는 변수가 포인터입니다(자바는 포인터를 처리하지 않습니다)포인터는 주소이고, 주소를 담을 수 있는 변수를 포인터 변수라고 합니다.포인터 변수를 선언할 때는 자료의 형을 먼저 쓰고 변수명 앞에는 *를 붙인다int *b; //b라는 변수는 이제 일반 숫자가 아닌 포인터(주소)를 담을 수 있는 정수형 변수이다char *c; //c라는 변수는 이제 포인터를 담을 수 있는 문자형 변수이다int a;는 기억 장소 어딘가에 가서 만들어진다, 주소를 알고 싶으면 &a로 알 수 있다int *b; int a; b ..
프로그래밍(3) 제어문 제어문프로그램과 c언어는 특별하지 않으면 위에서부터 아래로 흐른다.하지만 효율성을 위해 조건에 맞지 않으면 다시 하거나 반복하는 흐름을 만들기도 한다.흐름의 방향을 바꿔주는 것을 제어문이라고 한다.if문, for문, while문, do-while문, switch case문, break문, continue문이 있다.순서도가 나오면 먼저 변수를 적는다 (준비 기호)aevenodd1000 반복 변수 i가 1에서 시작되고(초기값) a가 될때까지(최종값) 1을 증가시킨다(증가값)i를 2로 나눠서 나머지가 0이면 even = even + i아니라면 odd에 누적시킨다(나머지가 0이면 짝수, 1이면 홀수)1이 증가해서 2가 된다a가 될때까지 반복한다 (a=10)aevenoddi10001  1  2 2  43 6 4 ..
프로그래밍(2) C언어 연산자 산술 연산자 : 전치연산/후치연산a = 1;b = ++a +1; //먼저 증가시키고 치환한다, 2+1=3을 b에 넣는다, a=2이다c = a++ +1; //연산 후에 치환한다, c=3, 그 다음에 a=3 abc2  1  24 (1과 3을 더한 것) 3 6 (a에 1을 더한 3에 3을 더한 것)346 프로그래밍은 적으면서 해야 편하다(디버깅)처음에는 낯설지만 하다 보면 점점 쉬워진다하지만 반드시 디버깅 해야한다안다고 머리로 풀면 백퍼센트 틀린다. 한 줄 한 줄 시키는대로 그대로 추적해서 그대로 써야 한다C언어의 관계 연산자와 비트 연산자, 논리연산자관계 연산자는 두 수의 대소를 비교하고, 비트 연산자는 컴퓨터가 저장하는 최소 단위인 비트끼리 연산하는 것이다우선순위는 산술 연산자 > 관계 연산자 > 논리 연..
프로그래밍(1) 순서도, C언어 기초 순서도순서도는 프로그램을 코딩하기 전에 그걸 그림으로 표현한 것이다.순서도를 보면 어디를 가도 이렇게 코딩하는 거구나, 하고 이해할 수 있다순서도는 항상 처음에 START, 마지막에 STOP이 나온다 (단자 기호)순서도나 프로그램은 별 말이 없으면 위에서부터 밑으로 진행이 된다 → FLOW 차트START 다음에는 준비 기호가 있다 (i, j, k)준비기호가 나오면 우리가 할일은 습관적으로 이 기호들을 적어두는 것이다. 이런 변수들을 사용한다는 것을 알아둔다.그 다음에는 수동 입력 기호가 있다. 키보드로 입력 받는 것을 말하는 것 (키보드로 i와 j값을 받는다)순서도나 프로그램 코드를 읽을 때는 반드시 거기에 나오는 변수를 적어가면서 변하는 값을 계속 추적하는 과정을 반드시 거쳐야 한다(디버깅)그 다음의 ..