[운영체제] 2주차

카테고리 : 운영체제 리딩타임 : 1 분 페이지뷰 : --

Special Purpose Registers

  • AR(Address Register): 메모리 주소 저장, size 12
  • PC(Program Counter): 다음에 실행될 명령어의 주소 저장, size 12
  • IR(Instruction Register): 지금 실행될 명령어 저장, size 16
  • DR(Data Register): 데이터를 저장, size 16
  • TR(Temporary Register): 임시 데이터 저장, size 16
  • AC(Accumulator): 산술연산, AC <- AC + DR, size 16

Data units in CPU

  • 이 그림을 그릴줄 알아야 함
  • 7개의 레지스터가 버스를 통해서 서로 연결
  • 데이터가 동시에 들어오면 안되기 때문에 MUX(multiplexer)를 통해 데이터를 보낼 레지스터 결정
  • ex: S2 = 1 S1 = 1 S0 = 1이라면, Memory Unit으로 데이터가 흘러감
  • ex: PC에 있는 값을 AR로 보내고 싶다면? S2, S1, S2를 각각 010으로 세팅하고 AR의 LD를 1로 세팅
  • LD(load): 이 단자의 값이 1이면 버스를 통해 해당 레지스터로 데이터가 들어옴
  • INR(increment): 이 단자의 값이 1이면 레지스터가 1 증가
  • CLR(clear): 이 단자의 값이 1이면 레지스터 값이 0이 됌
  • IR에는 레지스터 값이 변하면 안되므로 LD단자 밖에 없다
  • Memory Unit의 주소를 Address 단자를 통해 AR이 결정한다
  • E(overflow bit)

CPu Instruction Cycle

  1. Instruction Fetch
  • 메모리에서 IR로 명령어를 가져옴
  1. Decode
  • IR의 명령어 opcode를 알아냄
  1. Decide effective address, if MRI instruction
  • 메모리로부터 effective address를 읽어들임 (if I bit = 1)
  1. Data Fetch, if necessary, if MRI instruction
  2. Execute
  • decoded instruction을 실행
  1. Store result data, if necessary
  • result data를 AC로부터 타겟 메모리 주소에 씀

예시로 보는 프로그램의 CPU단 실행 순서

  1. 프로그램의 아이콘을 클릭
  2. OS가 HDD(SSD)에서 해당 파일을 찾는다
  3. OS가 메인메모리에서 빈 공간을 찾는다
  4. OS가 프로그램의 첫 번째 명령어의 주소를 불러온다
  5. CPU가 PC값을 AR로 보낸다 (AR <- PC)
  6. CPU가 M[AR]의 값을 IR로 보내고 PC값을 증가 시킴 (IR <- M[AR], PC++)
  7. CPU가 IR에 저장된 명령어를 decode한다 (AR <- IR(0-11))
  8. CPU가 메인메모리에서 DR로 데이터를 이동시킨다 (DR <- M[AR])
  9. CPU가 adder와 AC를 이용해 ADD op를 실행시킨다 (AC <- AC+DR)

댓글 공유

[컴퓨터구성] 2주차

카테고리 : 컴퓨터구성 리딩타임 : 1 분 페이지뷰 : --
  • (AND-OR === NAND-NAND, OR-AND === NOR-NOR)이므로 (AND-OR/OR-AND보다는 NAND-NAND/NOR-NOR를 쓰는게 더 저렴하다)

  • 여러가지 Boolean Algebra의 정리를 이용해서 Logic minimization(# of gates, # of gate inputs)하는데 어떤 정리를 먼저 쓰냐에 따라 결과가 다르기 때문에 쉽지가 않다.

  • Don’t care condition: F값이 0/1이 정의되지 않는 경우로 0/1로 나눠서 2번 풀어서 비용을 비교해야함

Useful Theorems

    1. x + xy = x, x + x’y = x+y
1
2


    1. ab + b’c + ac = ab + b’c
1
2


    1. if ab’ + a’b = ac’ + a’c, then b=c
1
2
3
4
5
6
ab' + a'b = ac' + a'c이 같다면 두 항을 xor취했을 때 결과가 0이 나와야 한다
-> ab' + a'b = ac' + a'c
-> (a xor b) xor (a xor c) = 0
-> a xor a xor b xor c = 0
-> b xor c = 0
-> hence, b = c
    1. if a = b, then a xor c = b xor c
1
2
3
4
5
3번과 마찬가지로, xor 이용
-> (a xor c) xor (b xor c)
-> a xor b xor c xor c
-> a xor b = 0
-> hence, a xor c = b xor c
    1. find the expression of f
1
2


    1. find the product-of-sum form of f = wxy + wx’y’ + w’xy’

카르노맵

  • 이런 문제를 쉽게 풀고자 나온게 카르노맵
  • 카르노맵의 출발은 AB’ + AB = A으로 Canonical Form을 나타내기에 충분하다라는 것
  • 보통 입력수가 4개 이하일 때 카르노맵을 이용해서 문제를 푼다.
  • 이웃한 1을 그룹지어 항을 만든다
  • 테이블을 만들때, 변수가 하나씩 바뀌어야 한다
1
2
(00, 01, 11, 10) // O
(00, 01, 10, 11) // X
  • 각 끝 행과 열은 처음 행과 열로 그룹지을 수 있다

댓글 공유

[운영체제] 1주차

카테고리 : 운영체제 리딩타임 : 1 분 페이지뷰 : --

운영체제의 목표

  • User convenience
  • Efficient Resource Management

운영체제 수업에서 12가지 룰

1) 컴퓨터 시스템은 CPU, Memories, HDD&IO device + Bus로 구성되어있다
2) CPU와 Main Memory 만이 internal하고 다른 모든 것들은 external 디바이스
3) Storages는 2가지 종류로 구분
- Internal: register, cache, main memory => volatile
- External: HDD, SSD => permant
4) 모든 파일은 HDD에 저장된다고 가정
5) 모든 프로그램은 CPU에 의해 HDD에서 Main Memory로 적재된다
6) Main Memory는 일리노이 아키텍쳐(=폰노이만 구조, Illinois Architecture)로 가정
cf. 하버드 아키텍쳐(Harvard Architecture)

7) 모든 internal activities는 Main Memory를 이용해 CPU에 의해 수행
if there are activities inside computer system, there must be certain programs being executed by CPU only using MM
8) 오직 2개의 프로그램만이 존재: User program & OS program
9) User program이 아닌 모든 프로그램은 OS program
10) Osms Process Management, Resource Management, Control program을 수행
11) multi-user system을 가정
12) Computer system shared by users must keep all users & programs happy
happiness from user convenience, fastness and fairness

프로그램을 메모리에 적재에서 실행하는 이유?

  • CPU의 속도에 비해서 HDD/SSD의 속도가 너무 느려 더 빠른 Main Memory에 적재하여 실행

기타

  • LOAD vs STORE: Memory Hierarchy에서 데이터를 위로 보내면 LOAD, 아래로 보면 STORE
  • 폰노이만 아키텍쳐 (일리노이 아키텍쳐): Data + Code가 모두 메모리 안에 저장
  • 하버드 아키텍쳐: Date/Code 메모리가 분리되어 저장

댓글 공유

[컴퓨터구성] 1주차

카테고리 : 컴퓨터구성 리딩타임 : 1 분 페이지뷰 : --

Computer Architecture

  • refers to those attributes of the system that are visible to a programmer – those attributes that have a direct impact on the execution of a program (프로그래머에게 보이는 개념)

  • Instruction set: 3-, 2-, 1-, 0-address format, CISC and RISC, ……

  • Data representations: signed magnitude, 2’s complement, floating-point

  • Addressing: direct, indirect, relative, ……

  • I/O mechanisms: memory mapped, I/O mapped

Computer Organization

Synonymous with architecture in many uses
프로그래머에게 보이지 않는 개념(더 로우레벨)
Device를 어떻게 만들 것인가?

Why Learn Computer Architecture

  • CA lies between hardware and software
  • Hardware implies performance
  • Software affects usefulness (ease of use)
  • CA cannot be isolated from software issues (OS, complier, OOP, ……) and technology issues (memory technologies, underlying VLSI trends, ……)

폰노이만 구조

  • 프로그램을 메모리에 저장해서 실행하는 개념
  • 메모리에 저장하는 것이니 CPU 입장에서 불러오는 메모리의 내용만 바꾸면 매번 다른 일을 할 수 있다 => 소프트웨어 라는 개념이 탄생
  • 단점으로는 CPU가 아무리 빨라도 메모리가 bottle neck이 된다는 것.
  • 메모리 용량은 유지하면서 어떻게 하면 속도를 빠르게 할 수 있을까 라는 게 컴퓨터하는 사람들의 중요한 연구 주제

Logic Gates

  • AND/OR/NOT 만 있으면 모든 회로를 다 만들 수 있다(=Complete set)
  • 사실은 여기 중에서도 AND/NOT 아니면 OR/NOT만 있어도 된다.
  • Buffer는 input/output이 똑같은데 왜 필요하나? => logical하게 의미는 없지만 신호의 특성을 바꿔준다
  • NAND가 중요한 게이트, 복잡해보이지만 만들기 쉬움. AND게이트를 만든 다음에 NOT을 붙인다(AND게이트보다 비용이 적게 듬), 수학적으로 문제를 풀 때는 Complete set(AND,OR,NOT)을 써야되지만 NAND게이트만 있으며 다 만들 수 있기 때문에 비용측면에서 많이 쓰인다
  • NOR도 NAND랑 마찬가지.
  • XOR: ODD function(1이 홀수개냐)으로 정의
  • XNOR: EVEN function(1이 짝수개냐)으로 정의

Canonical Form(표준형식)

  • Minterm: 1을 위주로…, AND-OR

  • Maxterm: 0을 위주로…, OR-AND

  • Minterm으로 만들어야 비용을 적게 들일 수 있다

  • 예를 들어, XOR 게이트를 다음과 같이 나타낼 수 있다

    a b f
    0 0 0
    0 1 1
    1 0 1
    1 1 0
  • Minterm

  • 1을 기준으로 표현하여 각 항을 +한다

1
f = a'b + ab'
  • Maxterm
  • 0을 기준으로 표현하여 각 항을 *한다
1
f = (a+b) * (a'+b')

댓글 공유

[알고리즘] 병합정렬(머지소트/Merge Sort)

카테고리 : 알고리즘 리딩타임 : 1 분 페이지뷰 : --

병합정렬(Merge Sort)

나누는 부분인 mergesort()와
나눈 부분을 정렬을 하면서 합치는 merge()로 구분할 수 있다.
중간 중간 정렬된 원소들이 들어갈 임시 배열 sorted를 선언해줘야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
int arr[10];
int sorted[10];

mergesort(int arr[], int left, int right){
// left가 right보다 작으면 계속 반씩 나눠준다. 크다면 아무런 동작도 하지 않고 빠져 나와 재귀함수의 merge부분으로 들어간다.
if(left < right) {
int mid = (left+right)/2;

mergesort(arr, left, mid);
mergesort(arr, mid+1, right);
merge(arr, left, mid, right); // 반씩 나눈 부분을 합친다.
}
}

merge(int arr[], int left, int mid, int right){
int i = left, j = mid+1, k = left;
// 나눈 부분을 합친다
while(i <= mid && j <= right) {
if(arr[i] < arr[j]) {
sorted[k] = arr[i];
i++;
} else {
sorted[k] = arr[j];
j++;
}
k++;
}
// 왼쪽 부분이 먼저 끝날수도, 오른쪽 부분이 먼저 끝날수도 있기 때문에 남아있는 원소를 넣어준다.
if(i > mid) {
for(; j <= right; j++) {
sorted[k] = arr[j];
k++;
}
} else {
for(; i <= mid; i++) {
sorted[k] = arr[i];
k++;
}
}
// 최종적으로 sorted배열에 있는 원소를 실제 배열인 arr로 옮겨준다
for(int m = left; m <= right; m++) {
arr[m] = sorted[m];
}
}

시간복잡도는 평균적인 경우나 최악의 경우에도 O(NlogN)을 보장한다.
왜냐면 원소들의 순서가 어떻든, 퀵소트처럼 이미 정렬이 됬든 안됬든, 무조건 낱개가 될때까지 반씩 나눈 다음에
낱개가 된 원소들끼리 합치면서 정렬을 하기 때문이다.
이미 공부를 했던 정렬인데 영상을 참고하면서 따라했다.
언제나 개념은 알고있지만 실제로 코드로 옮기는 부분에 있어서 문제가 많다.
Keep Going

댓글 공유

[책] 실용주의 사고와 학습

카테고리 : 리뷰 리딩타임 : 3 분 페이지뷰 : --

리뷰라기 보다는 책을 읽고 내용이 머릿속에 잘 안 남는 것 같아 이렇게라도 따로 내용정리를 해둘려고 한다.
책의 내용을 그대로 쓴 것이 대부분이고 중간중간 나의 생각을 짧게 곁들일 것이다.
개발자라는 직업을 선택한 이상 또한 이 시대를 살아가는 현대인인 이상
매일 매일 새로운 것들을 배워야 하고 그 배움의 과정을 보다 효율적으로 할 수 없을까라는 궁금증을 풀어줄 수 있었다
배워야 한다는 사실에 스트레스 받지 않고 배움 자체를 즐기다보면 어느 순간 꼭대기에 올라가 있지 않을까

실용주의 사고와 학습

  • 바람직한 어려움: 학습할 때 오히려 어려운 것들이 학생에게 더 이득이 되는 경우가 많다
  • 학생들의 수업 만족도가 높은(잘 배웠다고 생각이 드는) 수업이 오히려 학생에게 해가 되는 경우가 있다
  • 앞으로 의사소통 기술, 배우고 생각하는 기술이 중요
  • 우리는 교사와 학생의 관계를 착각하는 경우가 많다. 학습은 교사가 가르치는게 아니라 학생이 배우는 것이다
  • 삶에 있어서 고정불변인 것은 아무것도 없다. 오직 죽은 물고기만이 흐름을 따라간다
  • 인간의 사고(인지)에는 내재된 편견이 있다
    _ 지금 내가 떠오르는 생각이 정답이 아닐 수 있다
    _ 인간의 생각은 단순한 사실 하나에도 영향을 받는다. 신입사원 면접을 보는 층으로 올라가기 위해 엘리베이터 안에서 마시는 커피가 아이스냐 핫이냐에 따라 그 면접관의 편향은 달라지는 것처럼..

드라이퍼스 모델

  • 초보자는 규칙을 활용하고 전문가는 직관을 활용하라
  • 초보자에서 전문가로 가는 과정에 동반되는 것
    _ 규칙에 의지 -> 직관에 의존
    _ 관찰자 -> 시스템의 일부(시스템적 사고)
  • 사려 깊은 연습(말콤 글래드웰이 아웃라이어에서 말한 10년의 법칙, 칙센트미하이가 말한 ‘FLOW’ 상태에도 들어갈 수 있는 작업이니 이 얼마나 좋은 것인가..)
    _ 작업은 적당히 어려워야된다. 도전적이지만 할 수 있는 수준
    _ 피드백을 적극적으로 받을 수 있는 환경
    _ 반복하면서 잘못을 교정할 기회
  • 근무 환경에 모범이 될 만한 사람에게 배우기 -> 학교든 회사든 나만의 멘토를 정해 마음 속으로 정해서 따라해야겠다!

두 개의 CPU 모드

  • 우리의 뇌는 두 개의 모드로 구성(L모드, R모드)
  • L모드: 선형적, 논리적, 언어처리
  • R모드: 직관, 문제해결, 창조성
  • 두 가지 모두 필요
  • R모드는 예측할 수 없기 때문에 늘 R모드가 주는 해답이나 통찰력을 대비해야 한다
    _ 어떤 아이디어가 떠오르면 바로 잡을 수 있도록 24시간 준비되있어야 한다
    _ 좋은 아이디어는 누구나 갖고 있으나 아주 일부만이 그 아이디어를 기록하는 수고를 한다
    _ 그 중에 아주 일부만이 아이디어를 실천한다
    _ 그 중에 아주 일부만이 아이디어를 성공시킨다
    _ 최소한 기록이라도 해둬야지 윗 단계의 가능성이 열리므로 아이폰의 메모장을 잘 활용해서 늘 기록하자!
  • 컴퓨터는 쓸모없다. 컴퓨터는 오로지 답을 줄 뿐이다 - 파블로 피카소

  • 질문이 더 중요하다는 얘기(R모드의 중요성)
  • 상품화란 심미성을 겨루는 것이다. 좋은 디자인을 위해 노력하자 (ex: 마이크로소프트가 아이폰을 만든다면? 포장박스부터 덕지덕지 문구..)
  • 연구 결과: 매력적인 사용자가 인터페이스가 못 생긴 인터페이스보다 더 사용하기 쉽다
  • 뇌의 가소성: 가능성을 믿는한 뇌의 상한은 존재하지 않는다
    _ Impossible is nothing
    _ 생각하는 대로 된다
    _ 용불용설
    _ 외국어를 배우고 싶다? 늘 그언어로 말하고 생각
    • 코딩을 잘하고 싶다? 코딩을 더해라..
  • 지각력 있는 뇌의 R모드에 접근하려면 언어적이고 분석적인 L모드를 꺼버릴 만한 일을 주어야 한다 (음악 듣기, 그림 그리기, 명상, 조깅 등등)
    _ 요즘 공부를 하면서 재즈를 들으면서 하고 있는데 이게 생각 외로 큰 도움이 되는 것 같다
    _ 뒤늦게 공부를 시작한 나로선 공부에 대한 압박감이 있는데 공부라는 것이 L모드와 R모드가 조합이 되어야 한다면 무조건적으로 시간을 많이 투자해 앉아서 책읽기같은 전통적인 공부 방법에 치중해서는 안된다
    _ 때로는 공부/코딩 이외의 활동을 하면서 일부로 공부와 전혀 상관없는 활동을 해야된다는 말이고 넓게 보면 모든 일은 한번씩 해봄으로써 새로운 경험이 될 것이다
    _ 나에겐 웨이트를 꾸준히 하는 것이 그 예
    _ 어려운 문제를 풀려면 키보드에서 떨어져라
  • 변화는 좋은 것이다
    _ 깊이 물든 습관은 뇌에 좋지 않음
    _ 뇌는 적응해야하는 것이 없다면 축 늘어지게 됨
    _ 일상적으로 하는 작은 행동에도 변화를 줘보자(양치를 할 때 왼손으로 하기 등)

당신의 마음을 디버그하라

  • 상관 관계 VS 인과 관계
    _ 단순한 상관 관계를 원인과 결과로 오해하기 쉽다
    _ 두 변수가 연관되어 있다는 것이 꼭 어느 한 쪽이 다른 쪽의 원인이라는 것은 아니다
  • 기억보다 글로 쓴 것을 신뢰하라. 기억은 모두 읽기와 쓰기가 함께 일어난다
  • 여러분이 무엇인가를 엄청나게 확실하고 있을 때 자신에게 왜냐고 물어보자
    _ 어떻게 알았는가?
    _ 누가 말한 것인가?
    _ 구체적으로 어떠한가?
    _ 내가 하고 있는 일이 당신에게는 어떤 영향을 주는가?
    _ 무엇이랑 비교하면? 혹은 누구랑 비교하면?
    _ 항상 일어나는가? 예외는 없는가?
    _ 당신이 했다면 어땠겠는가?
    _ 무엇때문에 못하는가?
    _ 언론들도 왜곡 보도를 하고 가짜 뉴스가 판 치는 세상에서 인터넷에서 단순히 어떤 사실을 봤다고 믿지 말자. 진정한 정보를 가려내는 능력을 길러야 한다

의도적으로 배우라

  • 현재의 기술과 문화에서 배우는 능력은 성공에 있어 가장 중요한 요소
  • 교육(education)이란 단어는 라틴어 educare에서 온 단어인데 ‘끄집어낸다’라는 의미.
  • 학습은 누군가가 여러분에게 해주는 것이 아니다. 여러분이 하는 것이다.
  • 지식을 경험없이 그 자체로만 습득하는 것은 효과적이지 않다 -> 목적없이 책읽기?
  • 목표와 피드백 없이 무작위로 접근하게 되면 무작위적인 결과를 낳는다
  • SMART한 목표 설정
    _ Specific(구체적인)
    _ Measurable(측정 가능한)
    _ Achievable(달성 가능한)
    _ Relavant(의미 있는)
    _ Time-Boxed(시간 제한이 있는)
  • 계획하기는 계획 그 자체보다 중요하다 - 아이젠하워

  • 독서할 때의 의식적인 SQ3R 학습법
    _ Survey(훑어보기): 목차를 보면서 훑어보며 전체적인 개요 파악
    _ Question(질문): 생각나는 질문들을 적어놓기
    _ Read(읽기)
    _ Recite(낭송): 요약하고 메모하고 스스로 표현해보기
    _ Review(복습): 다시 읽고 메모를 확장하고 동료와 토론
  • 마인드맵
  • 타이핑보다는 손글씨
  • 가르치며 배우기 -> 러버덕디버깅

경험 축적

  • 배우기 위해 놀기 -> 그 언어를 공부하고 그 라이브러리를 공부하기 전에 일단 그 언어로 뭐라도 만들어보자. Learning by Coding
  • 압박은 인지를 죽인다
    _ 촉박한 마감이 닥쳐야 가장 효과적인 것은 L모드에 일정 부분 유효하지만 R모드에서는 그렇지 않다
    • 시간 압박은 후유증까지 남긴다. 벼락치기는 이틀 정도는 축 처지게 됨
  • 뇌는 입력의 원천이 뭔지에 대해 속기 쉽기 때문에 성공을 상상하는 것은 그것을 달성하는데 확실히 효과적이다 -> 이미 한 것처럼 연기하기 / 이미지 트레이닝
  • 우리는 모방자다 -> 나보다 뛰어난 사람들 속에 있기

초점 관리하기

  • 정보가 넘쳐나는 시대에서 정보 과잉은 지식과 주의의 결핍을 만들었다
    _ 어쩌면 미래는 이러한 노이즈에 집중하지 않고 자신의 것을 묵묵히 꾸준히 하는 사람에 있지 않을까?
  • 명상의 이득: 명상을 할 때나 의식적으로 주의를 기울일 때뿐만 아니라 하루 종일 효과가 있다 -> 명상앱은 오늘부터 깔아서 자기 전에 10분이라도 해봐야겠다라는 생각을 했는데 앉아서 해야된다네..
  • 멀티태스킹을 하지 말자. 우리의 뇌는 컴퓨터와 달라서 Context Switching시 20분의 시간이 든다.
    _ 대마초를 피우는 것보다 계속 메일을 확인 하는 것이 우리의 아이큐를 더 떨어뜨린다고 한다
    _ 윈도우나 맥에서 알트탭, 커맨드탭으로 화면전환하는 것조차 단기기억과 에너지를 필요로 한다
    _ 더블 모니터를 쓰기만 해도 생산성이 30퍼센트 올라감

댓글 공유

[운영체제] 4장 5장 Semaphore, Monitor 요약

카테고리 : 운영체제 리딩타임 : 1 분 페이지뷰 : --
  1. 임계영역(Critical Section)
  • 다수의 프로세스가 접근 가능한 영역이면서 한 순간에 하나의 프로세스만 사용할 수 있는 영역

  • 어떤 프로세스가 임계영역에 들어가면 다른 프로세스는 임계영역으로의 진입이 금지되어야 한다

  • 프로세스/스레드 동기화를 함으로써 임계구역 문제를 해결하고 프로세스 실행 순서를 제어할 수 있다

  • 임계영역 문제 해결책

  • 상호배제(Mutual Exclusion): 한 프로세스가 임계영역에서 작업시 다른 프로세스는 접근 불가능

  • 진행(Progress): 임계영역에서 작업하는 프로세스가 없을 때 여러 프로세스가 임계영역에 진입하고자 한다면 알고리즘에 따라 프로세스 선정, 프로세스 선택을 무한정 미룰 수 없다

  • 제한된 대기(Bounded Waiting): 한 프로세스가 임계영역 진입을 요청한 후 수락되기 전까지 다른 프로세스가 진입할 수 있는 횟수를 제한

  • 동기화 도구: 세마포어, 모니터

  1. 세마포어(Semaphore)
  • 다익스트라가 제안
  • 구조: 정수형 변수 + 두 개의 동작(P, V)
  • 세마포어란 음이 아닌 정수값을 가지는 플래그 변수
  • 임계영역에 들어가기전에 P: acquire() 하고
  • 임계영역으로부터 나올 때 V: release() 한다
  • P와 V를 다음과 같이 정의한다
    1
    2
    3
    - P(S): while S <= 0 do no-op; // 세마포어 변수 S가 0이면 임계구역 진입 불가
    S = S - 1; // 세마포어 변수 S가 1이면 진입하여 0으로 만든 후 다른 프로세스 진입 못 하게 블락
    - V(S): S = S + 1; // 작업을 완료하고 나올 때 1을 더해줘 다른 프로세스가 진입 가능하게 만듬
  1. 모니터(Monitor)
  • 세마포어보다 고수준의 개념
  • 구조: 공유자원 + 공유자원 접근 함수
  • 2개의 queues: 배타동기 + 조건동기
  1. 교착상태(Deadlock)
  • 교착상태의 필요조건: 상호배타(Mutual Exclusion), 보유 및 대기(Hold and Wait), 비선점(No Preemption), 환형대기(Circular Wait)
  • 교착상태의 처리: 방지, 회피, 검출 및 복구, 무시
  • 실제 상황에서 교착상태는 잘 일어나지 않는다

댓글 공유

[운영체제] 3장 프로세스, 스레드 요약

카테고리 : 운영체제 리딩타임 : 1 분 페이지뷰 : --

3장. 프로세스, 스레드

  1. 프로세스
  • 프로세스: 메모리에 적재되서 현재 실행 중인 프로그램
  • 각 프로세스마다 코드, 데이터, BSS, 힙, 스택 등의 메모리 구조를 가짐
  • 프로세스는 운영체제 내에서 프로세스 제어 블록(PCB: Process Control Block)으로 표현됨
  • PCB에는 프로세스 식별자, 프로세스 상태, 프로그램 카운터, 레지스터 등이 저장된다
  • 문맥교환(Context Switching): 프로세스끼리 제어 상태 변화가 일어났을 때 발생 -> 오버헤드(Overhead) 발생
  • OS의 스케쥴링에 의해 프로세스 실행 순서 결정
  • 각각의 프로세스는 독립적이므로 한 프로세스가 비정상적으로 종료되도 다른 프로세스에 영향이 없다
  1. 스레드
  • 스레드: 하나의 프로세스 내에서 실행되는 여러 흐름의 단위
  • 각 스레드는 스택만 할당받고 코드, 데이터, 힙 등은 프로세스 내에서 공유한다
  • OS의 스케쥴러는 스레드를 최소 단위로 작업
  • 각각의 스레드는 프로세스와 달리 비정상적으로 종료되면 다른 스레드들도 종료된
  1. 기타
  • 일반적으로 새로운 프로세스가 생성되면 프로세스를 위한 스레드도 함께 생성된다
  • 프로세스의 생성/종료보다 스레드의 생성/종료의 오버헤드가 훨씬 적다
  • 트랩(Trap): 부적절한 파일접근이나 오류, 예외 상황때문에 발생 -> 소프트웨어적인 흐름의 변화 (인터럽트: 하드웨어적인 흐름의 변)

댓글 공유

[운영체제] 1장 2장 요약

카테고리 : 운영체제 리딩타임 : 1 분 페이지뷰 : --

학교에 가기전 전공과목에 대해서 공부하고 있다. 중요한 과목들은 다 파악이 됬고
훑어보는 목적으로 각 과목에 대해서 알아보고자 한다. 강의는 경성대 양희재 교수님의 강의로 주로 공부를 하며
도서관에서 빌린 <운영체제 : 그림으로 배우는 원리와 구조>라는 책을 읽고 모자란 설명을 채울 생각이다.

1장과 2장은 서론같은 느낌이라서 한 포스트에 요약하겠다.

1장. 컴퓨터 시스템 소개

  1. 컴퓨터 시스템 구성요소

1) 프로세서

  • 중앙처리장치(CPU) : 레지스터, 산술논리연산장치(ALU), 제어장치

2) 버스

3) 레지스터

  • 프로그램 카운터(PC: Program Counter): 프로그램 수행을 제어하는 명령어 실행 순서 보관(다음에 실행할 명령어 주소 저장)
  • 명령어 레지스터(IR: Instrument Register): 현재 수행하는 명령어를 저장, 명령어의 연산자 부분만 저장한다.
  • 프로그램 상태 레지스터(PSR: Program Status Register): 플래그 같은 상태 정보 저장
  • 메모리 주소 레지스터(MAR: Memory Address Register): 접근하려는 메모리의 주소 저장
  • 메모리 버퍼 레지스터(MBR: Memory Buffer Register): 메모리에서 정보를 읽거나 저장할 때 사용

4) 메모리

  • 메모리의 지역성: 실행 중인 프로세서가 실행기간 동안 메모리 정보를 균일하게 접근하지 않고 일부만 집중적을 참조
  • 메모리 속도: 메모리 사이클 시간 & 메모리 접근 시간
  • 가상 메모리(Virtual Memory): 보조기억장치에 저장했다가 주기억장치에 필요할 때 실행
  • 메모리의 논리적 주소 -> 물리적 주소 : Memory Mapping (메모리 관리 장치 MMU: Memory Management Unit이 해줌)
  • 캐시(Cache): 처리 속도가 빠른 프로세서와 상대적으로 느린 주기억장치 사이에서 데이터를 저장하여 속도 차이를 줄여줌. 주기억장치
    에서 일정 블록의 데이터를 가져와 워드(Word) 단위로 프로세서에 전달
  • 프로세서는 주기억장치 접근이 필요하면 먼저 캐시를 조사
  • 캐시 태그와 원하는 메모리 주소 태그가 일치하면 캐시 적중(Cache Hit)라 한다 <-> 캐시 실패(Cache Miss)

5) 주변장치

  • 키보드, 마우스 등
  1. 컴퓨터 시스템의 동작

1) 명령어 구성

  • 실행할 연산을 나타내는 연산 코드(Operation Code) & 처리할 데이터가 저장된 주소를 나타내는 오퍼랜드(Operand)로 이루어짐
  • 직접 주소와 간접 주소

2) 인터럽트

  • 인터럽트를 받은 프로그램은 실행을 멈추고 다른 프로그램을 실행한다
  • 입출력장치가 새로운 입출력 연산을 수행하려고 하면 프로세서는 폴링(Polling)을 통해 각 장치의 상태 비트 검사 (폴링 방식)
  • 인터럽트가 발생했을 때 프로세서에게 알려줌. 버스 중 인터럽트 요청 회선(IRQ: Interrupt Request Line)이 이런 용도로 쓰임(인터럽트 방식)

2장. 운영체제 소개

  1. 운영체제의 기능
  • 버퍼링과 스풀링 모두 입출력장치의 느린 속도를 보완하기 위해 이용하고 프로세서와 입출력장치를 항상 분주하게, 유휴 시간이 없게 만듬
  • 버퍼링(Buffering): 주기억장치(보통 캐시메모리)를 버퍼로 사용
  • 스풀링(Spooling): 보조기억장치(하드디스크)를 버퍼로 사용

댓글 공유

[보안] CSRF(Cross Site Request Forgery)란 무엇인가?

카테고리 : 보안 리딩타임 : 1 분 페이지뷰 : --

CSRF란 무엇인가?

1
2
CSRF(Cross Stie Request Forgery) : 사이트간 요청 위조
웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격방법을 의미한다 - 나무위키

정의만 보면 앞서 알아봤던 XSSSQL injection과 비슷하다.
XSS가 사용자가 특정 사이트를 신뢰한다는 점을 공격하는거라면, CSRF는 특정 사이트가 사용자의 브라우저를 신뢰한다는 점을 공격하는 것이 다르다.

간단하게 정리하자면, 악성코드가
XSS: 클라이언트에서 발생 / CSRF: 서버에서 발생
이라고 할 수 있다.

2008년도에 있었던 옥션 해킹 사고도 CSRF로 공격을 했다고 한다. (해커가 옥션 운영자에게 CSRF 코드가 포함된 이메일을 보내서 관리자 권한을 얻어냈다)

공격 과정

1
2
3
...
<img src="http://auction.com/changeUserAcoount?id=admin&password=admin" width="0" height="0">
...

위 옥션 사건을 예로 들어보자.

  1. 옥션 관리자 중 한명이 관리 권한을 가지고 회사내에서 작업을 하던 중 메일을 조회한다. (로그인이 이미 되어있다고 가정하면 관리자로서의 유효한 쿠키를 갖고있음)
  2. 해커는 위와 같이 태그가 들어간 코드가 담긴 이메일을 보낸다. 관리자는 이미지 크기가 0이므로 전혀 알지 못한다.
  3. 피해자가 이메일을 열어볼 때, 이미지 파일을 받아오기 위해 URL이 열린다.
  4. 해커가 원하는 대로 관리자의 계정이 id와 pw 모두 admin인 계정으로 변경된다.

방어 방법

1. Referrer 검증

request header에 있는 요청을 한 페이지의 정보가 담긴 referrer 속성을 검증하여 차단.
일반적으로 이 방법만으로도 대부분 방어가 가능할 수 있다.
옥션이 아닌 개인 이메일에서 요청이 들어오는 것처럼,
같은 도메인 상에서 요청이 들어오지 않는다면 차단하도록 하는 것이다.

2. CSRF Token 사용

랜덤한 수를 사용자의 세션에 저장하여 사용자의 모든 요청(Request)에 대하여 서버단에서 검증하는 방법.

1
2
3
4
5
// 로그인시, 또는 작업화면 요청시 CSRF 토큰을 생성하여 세션에 저장한다. 
session.setAttribute("CSRF_TOKEN",UUID.randomUUID().toString());

// 요청 페이지에 CSRF 토큰을 셋팅하여 전송한다
<input type="hidden" name="_csrf" value="${CSRF_TOKEN}" />

3. CAPTCHA 사용

요즘은 거의 모든 웹사이트에서 캡차를 이용하는 것 같은데 캡차이미지상의 숫자/문자가 아니라면 해당 요청을 거부하는 것이다.

이 외에도 form 태그를 입력할 시 GET방식을 지양하고 POST방식을 쓰도록 하는 것은 기본이라고 할 수 있다.


출처 : 나무위키, 위키피디아,
http://blog.ilkyu.kr/entry/CSRF-Crosssite-Request-Forgery-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EA%B0%84-%EC%9A%94%EC%B2%AD-%EC%9C%84%EC%A1%B0,
http://itstory.tk/entry/CSRF-공격이란-그리고-CSRF-방어-방법

댓글 공유

Copyrights © 2020 Jin Seon. All Rights Reserved.
저자 이미지

Jin Seon

Aspiring developer dreaming about freedom


Software Enginner


Seoul