반응형
grep [옵션] 찾을것 [파일명]

옵션
-r : recursive하게 폴더 안을 뒤진다.
-n : 소스 줄번호를 찍어준다.
-v : 제외할 것을 선택한다.
-Ev : 제외할 것을 여러개 선택할 수 있다.
-E : 선택을 여러개 할 수 있다.

예시)
grep Hello a | grep -v apple | grep -v orange | grep -v banana
grep Hello a | grep -Ev 'apple|orange|banana'
a 파일에서 Hello인 행을 찾은 뒤 그 행 중에서 apple, orange, banana인 문자열이 있다면 제외한다.


반응형

'리눅스 shell' 카테고리의 다른 글

ctag  (0) 2009.11.18
squid  (0) 2009.11.18
apt-get install  (0) 2009.11.18
svn  (0) 2009.11.18
ar  (0) 2009.11.18
반응형
10월 6일 안철수연구소에서 v3zip이 1.0.1.0으로 패치가 되었습니다.

버전 : AhnLab V3 Zip 1.0.1.1       일시 : 2009년 10월 6일

업그레이드 내용

1. 대용량 압축파일 지원
  • 4GB 이상의 파일 압축/해제 기능 보완
  • Zip64 포멧 지원
2. 인코딩 자동화
  • 일본어 (EUC, JIS), 중국어(간체,번체) 지원
3. 분할 압축 기능 개선
  • 기존 압축 완료 후 파일 분할하던 방식에서 압축 시점에 분할 파일로 생성되도록 기능을 변경
4. 압축률 성능 개선 

5. 설치 방식의 개선 
  • 설치 중 탐색기 재실행하지 않음
6. 압축풀기 기능개선
  • 진행률이 잘못 표기되는 오류 수정
  • 압축 풀기 시 발생하는 오류처리 기능 개선

앞으로도 지속적인 관심과 제품 개선에 대한 고객님들의 많은 참여 부탁 드립니다.

v3zip 홈페이지에서는 위와 같은 공지사항도 같이 올라 왔습니다.

이 리뷰는 새로 자동 업데이트가 적용된 V3 Zip 1.0.1.1(248)로 작성하였습니다. 

기능소개
1. 더 편리해진 압축기능
압축 파일을 또 압축할 일이 자주 있지는 않지만 가끔 필요할 때가 있습니다.
패치가 되고 난 후 압축 파일을 또 압축하는 게 더 쉬워졌습니다. :)
위의 메뉴는 파일 선택시 마우스 우측 버튼을 눌렀을 때 나오는 화면입니다.
압축 파일을 선택하더라도 위의 화면이 나오게 됩니다.
7-zip을 잠깐 사용해 봤을 때에도 이러한 기능이 있었으면 좋겠다고 생각했는데 v3zip에도 추가되어 좋았습니다.

2. 드라이브 압축기능
하나의 드라이브를 컨텍스트 메뉴를 통해 통채로 압축을 할 수 있습니다. 압축된 파일은 선택된 드라이브 안에 압축파일이 생성됩니다.
① 다음은 컨텍스트 메뉴에서 R 드라이브를 압축할 수 있습니다.

② 다음은 압축한 결과 화면입니다.
※ 아쉬운 점은 CD-ROM 드라이브같은 읽기 전용 드라이브에는 압축파일을 만들 수가 없다는 점입니다. 사용할 수 있는 드라이브에 압축 파일을 쓸 수 있으면 좋겠습니다.

약간의 문제점
4GB 이상의 압축 파일을 풀다가 압축을 취소하면 기다리는 시간이 상당히 깁니다.
대략 1분의 시간 이상을 기다려야 파일 취소창이 사라질 정도입니다. 
이 시간이 짧아졌으면 하는 바램이 있습니다...

요번 리뷰는 약간 짧게 적을까 합니다.
프로그램을 사용하는 데 까다로운 편이 아니라서~
앞으로 쓰면서 좋은 점이나 불편한 점에 대해서 천천히 적어볼 생각입니다.
더 좋아질 v3zip을 기대하며 이만 짧게 마치겠습니다.
10월 14일 1:40여분에 - 려리군의 블로그 -







반응형
반응형

Computer virus

컴퓨터 바이러스

A computer worm is a computer program that can copy itself and infect a computer without permission or knowledge of the user.

컴퓨터 바이러스는 스스로 복사가 가능하고 사용자의 인지나 허락 없이 컴퓨터를 감염시키는 컴퓨터 프로그램이다.

The term "virus" is also commonly used, albeit errorneously, to refer to many different types of malware programs.

용어 바이러스는 널리 쓰이며 다른 많은 종류의 악성(malware) 프로그램으로 잘못 쓰이기도 한다.

The original virus may modify the copies, or the copies may modify themselves, as occurs in a metamorphic virus.

원래 바이러스는 변이하는 바이러스에서 발생하는 것처럼 복사본을 수정할 수 있거나 복사본이 스스로를 수정할 수 있다.

A virus can only spread from one computer to another when its host is taken to the uninfected computer, for instance by a user sending it over a network on the Internet, or by carrying it on a removable medium such as a floppy disk, CD or USB drive.

바이러스는 오직 한 호스트 컴퓨터가 감염되지 않은 컴퓨터로 전송될 때 예를 들어 인터넷의 네트워크로 바이러스를 보내거나 플로피 디스크, CD, USB 드라이브 같은 제거할 수 있는 매체를 통해 바이러스를 전송할 때 한 컴퓨터에서 다른 곳으로 퍼질 수 있다.

Meanwhile viruses are sometimes confused with computer worms and Trojan horses.

반면 컴퓨터 바이러스는 컴퓨터 웜이나 트로이 목마와 혼동된다.

A worm can spread itself to other computers without needing to be transffered as part of a host.

웜은 호스트의 부분으로써 전송될 필요가 없이 다른 컴퓨터에게 전파된다.

and Trojan horse is a file that appears harmless.

그리고 트로이 목마는 해가 없을 거 같은 파일이다.

Both worms and Trojans will cause harm to computers when executed.

웜과 트로이 목마 둘 다 실행될 때 컴퓨터에게 해를 끼친다.

Most personal computers are now connected to the Internet and to local area networks, facilitating the spread of malicious code.

대부분 개인 컴퓨터는 악성코드가 전파될 수 있는 LAN이나 인터넷에 연결되어 있다.

Today's viruses may also take advantage of network services such as the World Wide Web, e-mail, Instant Messaging and file sharing systems to spread, blurring the line between viruses and worms.

오늘날 바이러스와 웜의 경계선이 모호해 지고 파일 공유 시스템과 인스턴트 메세징, 이메일, 월드와이드웹 같은 네트워크 서비스에서 이익을 취한다.

Furthermore, some sources use an alternative terminology in which a virus is any form of self-replicating malware.

게다가 몇 곳은 어떤 자가 복제를 하는 악성코드인 바이러스를 대체용어로 사용하기도 한다.

Some viruses are programmed to damage the computer by damaging programs, deleting files, or reformating the hard disk.

일부 바이러스는 하드디스크를 포맷하거나 파일을 지우거나 프로그램을 손상시킴으로서 컴퓨터에 피해를 주도록 프로그래밍 되어 있다.

Others are not designed to do any damage, but simply replicate themselves and perhaps make their presence known by presenting text, vidio, or audio messages.

다른 바이러스는 피해를 주도록 만들어지지 않았지만 스스로 간단히 복사되며 글자, 비디오, 오디오 메시지로 표현함으로서 존재를 알릴 것이다.

Even these benign viruses can create problems for the computer user.

이러한 종양같은 바이러스들은 컴퓨터 사용자들에게 문제를 야기한다.

They typically take up computer memory used by legitimate programs.

바이러스들은 일반적으로 합법적인 프로그램에 의해 사용되는 컴퓨터 메모리에 올려진다.

As a result, they often cause erratic behavior and can result in system crashes.

결국, 바이러스는 엉뚱한 행동이나 시스템 충돌을 야기한다.

In addition, many viruses are bug-ridden, and these bugs may lead to system crashes and data loss.

게다가 많은 바이러스들은 버그 투성이이고 이러한 버그들은 데이터 손실이나 시스템 충돌을 야기한다.

반응형

'번역' 카테고리의 다른 글

MEMORY Storage Engine  (0) 2016.11.04
테스트 주도 개발  (0) 2016.01.22
악성코드  (0) 2009.10.07
BHO  (0) 2009.10.07
행성의 정의  (0) 2009.08.03
반응형

출처 : http://en.wikipedia.org/wiki/Malware


Malware

악성코드

Malware, short for malicious software, is a software designed to infiltrate or damage a computer system without the owner's informed consent.

악성 소프트웨어, 줄여서 악성코드는 사용자의 알려진 동의 없이 컴퓨터 시스템에 피해를 주거나 침투하는 소프트웨어이다.

The expression is a general term used by computer professionals to mean a variety of forms of hostile, intrusive, or annoying software or program code.

다양한 형태로 악의적으로 컴퓨터 사용자에 침입하고 괴롭히는 소프트웨어나 프로그램 코드를 의미하는 컴퓨터 전문가에 의해 사용되는 일반적인 용어다.

Many normal computer users are however still unfamiliar with the term, and most never use it.

많은 일반 컴퓨터 사용자들은 그러나 이 용어에 익숙하지 않고 대부분 사용하지 않는다.

Instead, "computer virus" is incorrectly used in common parlance and even in the media to describe all kinds of malware, though not all malware are viruses.

대신 "컴퓨터 바이러스"는 일반 회담에서 잘못 사용되며 대중매체에서조차 모든 종류의 악성코드를 묘사하지만 모든 악성코드는 바이러스가 아니다.

Software is considered malware based on the perceived intent of the creator rather than any particular features.

소프트웨어는 악성코드를 특별한 특징보다 제작자의 인지된 의도를 바탕으로 고려된다.

Malware includes computer viruses, worms, trojan horse, most rootkits, spyware, dishonest adware, and other malicious and unwanted software.

악성코드는 컴퓨터 바이러스, 웜, 트로이 목마, 대부분의 루트킷, 스파이웨어, 정직하지 못한 애드웨어 그리고 다른 악성코드 및 원하지 않는 소프트웨어를 포함한다.

In law, malware is sometimes known as a computer contaminant, for instance in the legal codes of California, West Virginia, and several other American states.

법에서 악성코드는 컴퓨터 오염물질로 알려져 있는데 예를 들어 켈리포니아, 웨스트 버지니아, 그리고 몇 개 다른 주에서는 합법적인 코드이다.

Malware is not the same as defective software, that is, soft which has a legitimate purpose but contains harmful bugs.

악성코드는 다른 컴퓨터를 감염시키는 소프트웨어와 같지 않다. 즉, 합법적인 목적을 가지지만 해로운 버그를 포함하는 소프트웨어이다. 


단어공부

infiltrate 침투하다

1. to enter or make sb enter a place or an organization secretly, especially in order to get information that can be used against it

2. to pass slowly into sth

intrusive 침입의, 주제넘게 참견하는

too noticeable, direct, etc. in a way that is disturbing or annoying

parlance 회담

(formal) a particular way of using words or expressing yourself, for example one used by a particular group

contaminant 오염균

a substance that makes sth impure

반응형

'번역' 카테고리의 다른 글

MEMORY Storage Engine  (0) 2016.11.04
테스트 주도 개발  (0) 2016.01.22
Computer virus  (0) 2009.10.07
BHO  (0) 2009.10.07
행성의 정의  (0) 2009.08.03
반응형

출처 : http://en.wikipedia.org/wiki/Browser_Helper_Object


Browser Helper Object

브라우저 도우미 객체

From Wikipedia, the free encyclopedia


Add-on Manager from Windows XP SP2 Internet Explorer

Window XP SP2 인터넷 익스플로어의 Add-on Manager

A Browser Helper Object (BHO) is a DLL module designed as a plugin for Microsoft's Internet Explorer web browser to provide added functionality. 

브라우저 도우미 객체는 추가된 기능을 제공하기 위해 인터넷 익스플로어 웹 브라우저를 위한 플러그인으로서 제작된 DLL module이다.

BHOs were introduced in October 1997 with the release of version 4 of Internet Explorer. 

BHO는 인터넷 익스플로어 버젼 4를 발매한 1997년 10월에 소개되었다.

Most BHOs are loaded once by each new instance of Internet Explorer. 

대부분의 BHO는 인터넷 익스플로러의 새 인스턴스를 만들 때 로드된다.

However, in the case of the Windows Explorer, a new instance is launched for each window.

그러나, 윈도우 익스플로러의 경우, 새 인스턴스가 각 윈도우에 대해 호출된다.

Some modules enable the display of different file formats not ordinarily interpretable by the browser. 

일부 모듈은 브라우저에 의해 보편적으로 해석될 수 없든 다른 파일 포멧의 표시를 가능하게 한다.

The Adobe Acrobat plugin that allows Internet Explorer users to read PDF files within their browser is a BHO.

브라우저 내에서 PDF 파일을 읽도록 인터넷 익스플로러 사용자에게 허용하는 Adobe Acrobat plugin이 BHO다.


Other modules add toolbars to Internet Explorer, such as the Alexa Toolbar that provides a list of web sites related to the one you are currently browsing, or the Google Toolbar that adds a toolbar with a Google search box to the browser user interface.

다른 모듈은 인터넷 익스플로러에 추가되는 툴바이다. 당신이 현재 찾고 있는 사이트와 관련된 웹 사이트의 리스트를 제공하는 Alexa 툴바나 브라우저 사용자 인터페이스로 구글 검색 창과 함께 툴바를 추가하는 구글 툴바가 있다.


Concerns

우려사항

The BHO API exposes hooks that allow the BHO to access the Document Object Model (DOM) of the current page and to control navigation. 

BHO API는 현재 페이지의 DOM을 접근하고 네비게이션을 제어하도록 BHO에게 허용하는 후킹에 노출되어 있다.

Because BHOs have unrestricted access to the Internet Explorer event model, some forms of malware have also been created as BHOs. 

BHO는 인터넷 익스플로어 이벤트 모델에 제한되지 않은 접근을 하기 때문에 악성코드의 일부 형태는 BHO로만들어져 왔다.

For example, the Download.ject malware installs a BHO that would activate upon detecting a secure HTTP connection to a financial institution, record the user's keystrokes (intending to capture passwords) and transmit the information to a website used by Russian computer criminals. 

예를 들어 Download.ject 악성코드는 금융기관으로 안전한 HTTP접속을 탐지하는데 활성화되고 (비밀번호를 얻기 위한) 사용자의 입력된 키를 기록하며 러시아 컴퓨터 범죄인들에 의해 사용되는 웹사이트로 정보를 전송하는 BHO를 설치한다.

Other BHOs such as the MyWay Searchbar track users' browsing patterns and pass the information they record to third parties.

MyWay Searchbar처럼 다른 BHO들은 사용자들의 웹서핑 패턴을 추적하고 그들이 기록한 정보를 3자에게 전달한다.

Many BHOs introduce visible changes to a browser's interface, such as installing toolbars in Internet Explorer and the like, but others run without any change to the interface.

많은 BHO들은 인터넷 익스플로어에 툴바를 설치하는 것처럼 브라우저의 인터페이스를 눈에 띄게 변화를 주지만 다른 BHO들은 인터페이스에 변화없이 실행한다.


 This renders it easy for malicious coders to conceal the actions of their browser add-on, especially since, after being installed, the BHO seldom requires permission before performing further actions.

이는 악성코드 작성자가 그들의 브라우저 add-on의 행동을 숨기기 쉽도록 하며 특히 설치된 후, BHO는 행동을 수행하기 전에 허락을 거의 요구하지 않는다.

 For instance, variants of the ClSpring trojan use BHOs to install scripts to provide a number of instructions to be performed such as adding and deleting registry values and downloading additional executable files, all completely transparent to the user [1]. 

예를 들어, CISpring 트로이 목마 변형은 BHO를 사용자들에게는 모두 완벽히 보이지 않고 추가적인 실행 파일을 다운로드 받고 레지스트리 값을 추가하거나 지우는 것 같은 일을 수행함으로써 많은 명령어들을 제공하는 스크립터를 설치하도록 한다.

The DyFuCA spyware even replaces IE's general error page with an ad page.

DyFuCA 스파이웨어는 광고 페이지와 함께 IE의 일반적인 오류 페이지를 대체하기도 한다.

In response to the problems associated with BHOs and similar extensions to Internet Explorer, Microsoft debuted an Add-on Manager in Internet Explorer 6 with the release of Service Pack 2 for Windows XP (updating it to IE6 Security Version 1 (a.k.a. SP2). 

인터넷 익스플로어의 BHO와 비슷한 확장 모듈과 관련된 문제에 대응하여, 마이크로소프트는 서비스 팩2 출시와 함께 인터넷 익스플로어에 Add-on 메니저를 출시했다.

This utility displays a list of all installed BHOs, browser extensions and ActiveX controls, and allows the user to enable or disable them at will. 

이 유틸리티는 모든 설치된 BHO의 목록을 보여주고, 브라우저 확장 모듈과 ActiveX 컨트롤, 그리고 사용자에게 의지대로 이러한 모듈들을 사용자가 가능하게 혹은 불가능하게 한다.

There are also free tools (such as BHODemon) that list installed BHOs and allow the user to disable malicious extensions. 

(BHODemon같은) 설치된 BHO들을 보여주는 무료 툴들이 있고 이는 사용자들에게 악성 확장모듈을 사용하지 못하도록 한다.

Spybot S&D has a similar tool built in to allow the user to disable installed BHOs. 

Spybot S&D는 설치된 BHO들을 사용하지 못하게 하는 비슷한 built-in 툴이 있다.

Many anti-spyware applications also offer the capability to block the download or install of BHOs identified as malicious.

많은 백신 프로그램들은 악성으로 확인된 BHO의 설치나 다운로드를 차단하는 능력들을 제공한다.


render = make, ~을 ~하게 하다.

conceal 숨기다.

반응형

'번역' 카테고리의 다른 글

MEMORY Storage Engine  (0) 2016.11.04
테스트 주도 개발  (0) 2016.01.22
Computer virus  (0) 2009.10.07
악성코드  (0) 2009.10.07
행성의 정의  (0) 2009.08.03
반응형
9월 22일 안철수연구소에서 v3zip이 출시되었습니다.

이 리뷰는 V3 Zip 1.0.0.13(235)으로 작성하였습니다. 

프로그램 설치

필요한 디스크 용량은 11.0MB라는군요. 설치한 후에는 7.79MB로 나옵니다. 다른 압축 프로그램보다는 용량이 약간 작네요.

환경설정
처음 설치를 마치고 나면 다음과 같은 환경설정 다이얼로그가 나타납니다.

1. 보기설정
압축 파일을 열었을 때 그 안에 어떤 내용이 있는 지 '목록 보기 설정'을 통해서 설정할 수 있습니다.
스킨 설정도 있습니다. 

2. 파일 연결
위와 같이 다양한 종류의 압축파일을 풀 수 있습니다. ALZ를 포함하여 40개 종류의 압축 파일들을 제어할 수 있습니다.

3. 탐색기 메뉴

바탕화면에서 압축 파일을 선택하거나 파일/폴더를 마우스 오른쪽 버튼을 클릭하여 선택했을 때 나올 컨텍스트 메뉴를 설정하는 부분입니다.


4. 보안 설정
압축풀기 제한이라는 부분이 인상적인 부분입니다.
'시스템 폴더 제한' 및 '프로그램 폴더 제한'은 압축을 저 폴더에서 풀게 될 때 프로그램에서 한 번 질문을 던지게 됩니다.

그리고 밑에 *.com; *.pif; *.scr; *.bat; *.cmd; *.lnk는 압축파일 목록 중에 이와 같은 확장자의 압축 파일이 있을 경우 압축을 풀지 못하도록 하는 기능입니다. 
lnk가 포함된 파일을 압축하고 풀려고 했더니 다음과 같은 메세지가 화면에 나타났습니다.

잘은 모르지만 위의 확장자들이 보안에 안 좋은 영향을 끼칠 수 있기 때문에 이런 기능이 있는 게 아닐까 싶습니다.

기능소개
1. 즐겨찾기
v3zip에 특이한 기능이 있어서 소개드릴까 합니다.
압축 파일을 빨리 불러오는 데 도움이 되는 기능입니다.

① 압축파일을 다음과 같이 엽니다.

② '즐겨찾기(A)' -> '즐겨찾기 추가'를 하면 다음과 같은 화면이 나타납니다. 우선, '확인'을 누릅니다.

③ 이제 V3zip 프로그램에서 ALT+1을 누르게 되면 위 압축 파일이 바로 열리게 됩니다.

※ 이와 같은 방식으로 10개의 즐겨찾기를 등록할 수 있습니다.

2. zip파일 인코딩 기능
파일 이름이 일본어가 포함되어 있는 압축파일이 있어서 이 파일들을 풀어보았습니다.
① 다음과 같이 '보기'->'인코딩'->'일본어(Shift JIS)'로 설정하였습니다.

② 한국어로 인코딩 되어 있을 때 깨져보이던 일본어 글자가 다음과 같이 보이는 것을 확인할 수 있습니다.


③ 일본어 인코딩 상태로 압축을 풀었더니 다음과 같이 총 파일수와 용량이 맞음을 확인할 수 있었습니다.

※ 한국어로 압축을 풀었을 때는 2개의 파일이 인코딩 문제 때문인지 압축이 풀리지 않았습니다. 

10월 6일에 새로운 버젼의 v3zip이 출시되었군요.
이 글은 새로운 버젼이 나오기 전에 작성한 리뷰라서 이 부분에 대한 글은 여기까지 작성할까 합니다.
이전 버젼에는 4GB 이상의 파일이 압축이 안된다던지 BIN파일이 압축이 안 풀리는 현상이 있었는데...
2가지 버그 모두 해결되었습니다... ^^;
자동 인코딩 등의 새로운 기능들도 추가되었고요...
점점 압축률이나 기능면에서도 개선되는 모습을 보니 기분이 좋아집니다~
앞으로 이어서 새 버젼에 대한 리뷰도 작성하도록 하겠습니다. :)

- 10월 7일 1시, 려리군의 블로그 - 

반응형
반응형

 

 ★취업과 TOEIC(취토)★ 토익900 (http://cafe.daum.net/4toeic)


 삼성을 목표로 고고고!!!! 삼성에 가기 위해 필요한 각종 정보 요청, 삼성 면접 후기, 삼성에 대한 질문 등

 

 

원래는 텝스학원을 다니고 있어서 시간 맞춰보려고 만들었던 건데...

요번주 일요일에 삼성 SSAT를 보게 되었습니다. ^^;

게을러서 이력서 쓰다 딴짓하다 해서 벼락치기 해야할 듯 합니다. ㅠㅠ;



위에 밑줄 친 거 다운 받으셔서 설치하시면 되고요...

'불러오기' 하셔서 SSAT.tim 파일 불러오시면 시간이 나오고요...

재생(▶)버튼 누르시면 시간이 카운트다운되고 첫번째줄의 시간이 0이 되면 소리가 나는 구조입니다. 그리고 알아서 다음 줄에 해당하는 시간이 카운트다운되고요.


언어영역 23분

수리영역 30분

추리영역 22분

공간지각 20분

시사영역 25분

상황판단 25분


이렇게 알고 있는데요...

이공계나 인문계와 시간 배분이 다른지도 궁금하고...

1~5번째줄은 1부시험으로 알고 있고 상황판단과 인성검사는 2부로 알고 있는데...

위의 시간 표시가 잘 되어 있는 지 알고 싶습니다.


만약 시간이 틀리다면 SSAT.tim파일과 프로그램을 수정해서 올릴 계획입니다.


모두 취업 건승하시고 좋은 하루 되세요~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

★취업과 TOEIC(취토)★토익900

(http://cafe.daum.net/4toeic)

 

반응형
반응형

※ 일반적인 쓰레드기반 다중 서버...

서버쪽 쓰레드 하나가 하나의 소켓을 전담한다.

서버쪽 쓰레드가 계속해서 일하는 것이기 아니기 때문에 소켓과 쓰레드가 1:1 대응되는 것은 서버에 부담이 된다. 

1. 리소스 부담... 

2. context switching이 빈번하게 발생하기 때문...


※ 소켓의 수는 줄일 수 없다.

하지만, 하나의 쓰레드가 3개의 소켓을 한꺼번에 담당한다면 리소스 부담 감소, context switching 감소...


22-1. Completion Port 입출력 기본 원리

IOCP란?

1. 기본적으로 비동기 입출력 모델이다. Overlapped IO

2. 제한된 쓰레드의 수를 통해서 여러 소켓의 입출력을 담당하게 한다.

3. 컨텍스트 스위칭에 소비되는 시간을 줄이는 모델이다.

4. Overlapped 입출력 모델의 특징과 비동기 Notification 입출력 모델의 특징을 동시에 지닌다.

원래 비동기 Notification 입출력 모델 : 먼저 확인 후 그 다음 입출력한다.

IOCP모델 : 먼저 입출력 한 후 확인을 나중에 한다.


IOCP 구현모델


Completion Port 내부에 큐가 생성된다. 

연결된 소켓이 입출력이 완료되면 Completion Packet을 만든다.

Completion Packet에는 입출력이 완료한 소켓 정보등에 대한 데이터 묶음이다.

이 packet을 Completion Queue에 집어 넣는다.

쓰레드는 큐에서 packet을 꺼내 내용을 처리한다.


IOCP에서 적절한 쓰레드의 수

Response Session : 서버가 클라이언트로 온 요청을 처리하고 전송하기 직전까지 준비과정.

Response Session이 짧은 경우(간단한 연산 결과를 돌려줌) : CPU의 개수를 초과하지 않는다.

Response Session이 긴 경우 : CPU의 개수를 적절히 초과하여 클라이언트의 평균 만족도를 높인다.

※ 실험적으로 판단하여 평가해야 한다.

일반적인 경우 : CPU의 개수를 초과하지 않는다.


22-2. Completion Port 입출력을 위한 기본 단계

1. Completion Port 오브젝트의 생성

HANDLE CreateIoCompletionPort(

HANDLE FileHandle, // 연결 시킬 소켓 핸들

HANDLE ExistingCompletionPort, // 연결시킬 completion port 핸들

ULONG_PTR CompletionKey, // completion key

DWORD NumberOfConcurrentThreads // 동시 실행 가능한 쓰레드의 수

);

실행예)

HANDLE hCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);

※ NumberOfConcurrentThreads가 0이면 CPU의 수만큼 허용


2. Completion Port 오브젝트와 소켓의 연결

completionKey : 입출력이 완료되었을 때 Completion Packet에 저장하는 추가적인 데이터

실행예)

CreateIoCompletionPort(소켓핸들, hCompletionPort, (DWORD)PerHandleData, 0);


3. Completion Queue에 들어 있는 패킷 정보 확인

BOOL GetQueuedCompletionStatus(

HANDLE CompletionPort,  // completion port 핸들

LPDWORD lpNumberOfBytes, // 전송된 바이트수

PULONG_PTR lpCompletionKey, // file completion key

LPOVERLAPPED *lpOverlapped, // buffer

DWORD dwMilliseconds // 선택적인 timeout 값

);

2,3,4 인자를 통해 completion packet의 내용을 얻어온다.


22-3 Completion Port 입출력 기반의 서버구현


CreateCompletionPort의 키 : 완료된 소켓의 정보


Completion Port : 완료감지, completion packet 생성 : key, overlapped, 전송 바이트 수로 구성.

WSARecv의 6번째 인자인 LPWSAOVERLAPPED에서 hEvent를 이용한다. ->

수신된 데이터가 존재하는 버퍼 정보를 담음. overlapped 구조체 뿐만 아니라 다른 구조체도 추가 가능. 



반응형
반응형

21-1. Overlapped 입출력의 의미

비중첩 데이터 입출력 모델


중첩된 데이터 입출력 모델

하나의 쓰레드 내에서 여러 개의 입출력이 진행되는 것


21-2. Overlapped 입출력을 위한 기본 단계

1. Overlapped 소켓의 생성

SOCKET WSASocket(

  __in  int af,

  __in  int type,

  __in  int protocol,

  __in  LPWSAPROTOCOL_INFO lpProtocolInfo,

  __in  GROUP g,

  __in  DWORD dwFlags

);

af : address family

type : 소켓 형태

protocol : 사용된 프로토콜(여기까지 socket과 동일)

lpProtocolInfo : 생성될 소켓의 성경을 정의하는 wSAPROTOCOL_INFO 포인터

g : 예약됨.

dwFlags : 소켓 속성을 지정하는 플래그


WSASocket(PF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);

WSA_FLAG_OVERLAPPED는 Overlapped 입출력이 가능하도록 하는 플래그.


2. 데이터 송수신

※ 다음 함수들은 버퍼에 존재하는 데이터를 모아서 한 번에 전송하고(Gather) 수신된 데이터를 여러 버퍼에 나누어 저장(Scatter)하는 Gather/Scatter 입출력을 한다.


int WSASend(

    SOCKET s,                  // 소켓 핸들

    LPWSABUF lpBuffers,    // WSABUF 구조체 배열의 포인터

    DWORD dwBufferCount, // lpBuffers가 가리키는 배열의 크기

    LPDWORD lpNumberOfBytesSent, // 전송된 바이트 수를 저장하기 위한 포인터

    DWORD dwFlags,

    LPWSAOVERLAPPED lpOverlapped,

    LPWSAOVERLAPPED_COMPLETION_ROUTING lpCompletionRoutine

);

리턴 : 성공시 0, 실패시 SOCKET_ERROR


typedef struct __WSABUF{

    u_long len;

    char FAR *buf;

}WSABUF, FAR* LPWSABUF;


int WSARecv(

    SOCKET s,                  // 소켓 핸들

    LPWSABUF lpBuffers,    // 수신 버퍼 정보를 지니는WSABUF 구조체 배열의 포인터

    DWORD dwBufferCount, // lpBuffers가 가리키는 배열의 크기

    LPDWORD lpNumberOfBytesRecvd, // 전송된 바이트 수를 저장하기 위한 포인터

    DWORD dwFlags,

    LPWSAOVERLAPPED lpOverlapped,

    LPWSAOVERLAPPED_COMPLETION_ROUTING lpCompletionRoutine

);

리턴 : 성공시 0, 실패시 SOCKET_ERROR

lpOverlapped : 중첩된 입출력을 하기 위해 사용.


3. 데이터 송수신 완료 확인

이벤트 커널 오브젝트 기반

CALLBACK 함수 기반


21-3. Event 커널 오브젝트 기반의 Overlapped I/O
이벤트 커널 오브젝트 : 데이터 송수신이 되었는지 확인하는 용도로 사용.

WSACreateEvent
typedef struct _WSAOVERLAPPED{
    DWORD Internal;
    DWORD InternalHigh;
    DWORD Offset;
    DWORD OffsetHigh;
    // 위의 4개 변수는 내부적으로 사용.
    WSAEVENT hEvent;    // 이벤트 핸들의 오브젝트를 저장한다.
}WSAOVERLAPPED, *LPWSAOVERLAPPED;

WSAWaitForMultipleEvents 함수는 이벤트가 시그널 되었는 지 확인한다.
WSAGetOverlappedResult(
    SOCKET s,
    LPWSAOVERLAPPED lpOverlapped, // WSASend 혹은 WSARecv 호출시 전달한 OVERLAPPED 구조체
    LPDWORD lpcbTransfer, // 전송된 바이트 수
    BOOL fWait,    // TRUE 전달 시 입출력 완료시까지 블로킹
    LPDWORD lpdwFlags
);
※ 송수신한 바이트수, 에러가 발생하였는가? 의 결과를 알려준다.

1. 소켓 이벤트와 WSAOVERLAPPED 구조체와 연결하는 방법
event = WSACreateEvent();
memset(&overlapped, 0, sizeof(overlapped));
overlapped.hEvent = event;
2. WSAWaitForMultipleEvents 함수 호출
WSAWaitForMultipleEvents(1, &event, TRUE, WSA_INFINITE, FALSE);
3. WSAGetOverlappedResult 함수 호출
WSAGetOverlappedResult(hSocket, &overlapped, &sendBytes, FALSE, NULL);

21-4. Completion Routines 기반의 Overlapped I/O
콜백 함수 : 특정 상황이 되면 시스템에서 의해 호출되는 함수.

LPWSAOVERLAPPED_COMPLETION_ROUTINE : 다음 콜백함수에 대한 포인터
void CALLBACK CompletionROUTINE(
    DWORD dwError,    // 오류 정보 전달 됨.
    DWORD cbTransferred,    // 전송된 바이트 수 전달됨
    LPWSAOVERLAPPED lpOverlapped,    // WSARecv 함수 호출시 전달한 구조체 변수
    DWORD dwFlags
);
콜백함수가 있을지라도 WSAOVERLAPPED 구조체는 전달해 주어야 한다.
그래서 이벤트 커널 오브젝트는 Dummy Object가 된다.

index = WSAWaitForMultipleEvents(1, &event, FALSE, WSA_INFINITE, TRUE);
index가 WAIT_IO_COMPLETION이면 중첩된 입출력이 완료되었다는 뜻.
다른 의미는 오류가 발생함.
반응형
반응형

foreach 반복문

foreach(object obj in list)

{

    DoSomthing(obj);

}

효과적이고 사용하기 쉬움


foreach문을 지원하는 타입

1. 기존타입(Array,List..)을 상속하여 사용

2. 새로운 타입 선언 가능 -> 인터페이스 구현


foreach를 지원하는 타입 정의(C#1.0)

IEnumerator e = list.getEnumerator();    // 특정 메소드를 선언하고 있다고 가정한다.

while(e.MoveNext())     // 다음 한 칸 이동하고 이동가능한지 리턴.

{

    object obj = e.Current;

    DoSomething(obj);

}

※ foreach를 지원하기 위해서는 다음 인터페이스를 구현하면 된다.

1. IEnumerable

public interface IEnumerable{

    IEnumerator GetEnumerator();

}

2. IEnumerator

public interface IEnumerator{

    object Current {get;}    // object로 되어 있기 때문에 boxing, unboxing필요...

    bool MoveNext();        // 어떠한 순서로 돌아가는 지 정의... 한가지 형태의 반복만 가능.

    void Reset();

}


※ yield return을 통해서 컴파일러 수준에서 Enumerator를 만들어준다.

public IEnumerator GetEnumerator()

{

    for(int i=0; i <  Cities.Length; i++)

    {

        yield return Cities[i];

    }

}


※ IEnumerable<string>와 같이 Generic을 이용하면 속도가 더 빠를 수 있다. boxing, unboxing없음.


Iterator 구문(2.0)

반복문 내부에서 yield 키워드 사용

C# 컴파일러가 iterator를 대신 구현해줌.

IEnumerable과 IEnumerator의 구체적인 구현 생략가능.

Generics 버전 인터페이스 : IEnumerable<T>, IEnumerator<T>


Iterator 주의사항

중첩 foreach문 사용자제 -> index를 이용한 for 반복문 사용 권장.

반응형

'C#' 카테고리의 다른 글

Nullable Type  (0) 2009.09.07
Generic  (0) 2009.09.07
Partial Class  (0) 2009.08.29
C# 3장 간단 정리  (0) 2009.07.30
C# 2장 간단 정리  (0) 2009.07.30

+ Recent posts