SLIDE1

Thursday, March 24, 2016

Tổng quan về Hệ Điều Hành Máy Tính


1. Định Nghĩa Hệ Điều Hành

hệ điều hành là thành phần trung gian giữa phần cứng máy tính và người sử dụng có chức năng điều khiển và phối hợp việc sử dụng phần cứng và cung cấp các dịch vụ cơ bản cho các ứng dụng.
mục tiêu: giúp người dùng dễ dàng sử dụng hệ thống và quản lý, cung cấp tài nguyên hệ thống một cách hiệu quả.

2. Cấu Trúc Hệ Thống Máy Tính


  • phần cứng: bao gồm các tài nguyên cơ bản của máy tính như CPU, bộ nhớ, các thiết bị nhập xuất
  • hệ điều hành: phân phối tài nguyên, điều khiển và phối hợp các hoạt động của các chương trình  trong hệ thống.
  • chương trình ứng dụng: sử dụng tài nguyên hệ thống để giải quyết 1 bài toán tính toán nào đó của  người dùng.
  • người dùng: con người, máy móc, máy tính khác.,...

3. các chức năng chính của hệ điều hành

  1. phân chia thời gian xử lý và định thời CPU
  2. phối hợp và đồng bộ hoạt động giữa các tiến trình
  3. quản lý tài nguyên hệ thống
  4. thwujc hiện và kiểm soát access conrol, protection
  5. duy trì sự nhất qunas của hệ thống, kiểm soát lỗi và phục hồi hệ thống khi có lỗi
  6. cung cấp giao diện làm việc cho users.

4. phân loại hệ điều hành

dưới góc độ loại máy tính:

  1. hệ điều hành dành cho máy mainframe
  2. hệ điều hành danh cho máy server
  3. hệ điều hành danh cho máy nhiều server
  4. hệ điều hành danh cho máy cá nhân
  5. hệ điều hành danh cho máy PDA (hệ điều hành nhung)
  6. hệ diều hành danh cho máy chuyên biệt
  7. hệ điều hành dành cho thẻ chíp

dưới góc độ số chương trình được sử dụng cùng lúc

  1. hệ điều hành đơn nhiệm
  2. hệ điều hành đa nhiệm

dưới góc độ người dùng

  1. một người dùng
  2. nhiều người dùng (mạng ngang hàng, mạng có máy chủ)

dưới góc độ hình thức xử lý

  1. hệ thống xử lý theo lô
  2. hệ thống chia sẻ
  3. hệ thống song song
  4. hệ thống phân tán
  5. hệ thống xử lý thời gian thực
  6. hệ thống xử lý đơn chương
  7. hệ thống xử lý đa chương
  8. hệ thống chia sẻ thời gian
  9. hệ thống đa xử lý

5. lịch sử phát triển của hệ điều hành

  • 1945-1955:
thiết kế, xây dựng, lập trình, thao tác đều do 1 nhóm người.
lưu trên phiếu đục lỗ
  • 1955-1965:
xuất hiện sự phân công công việc
hệ thống xử lý theo lô ra đời
lưu trên băng từ
  • 1965-1980
ra đời hệ điều hành, khái niệm đa chương
hệ điều hành chia sẻ thơi gian như CTSS cua MIT
MULTICS, UNIX
  • 1980-nay
ra đời máy tính cá nhân, IBM PC, MS-DOS, MACOS, WINDOW,..

Wednesday, March 16, 2016

Một Số Lệnh Shell Cơ Bản Trong Ubuntu/Linux


1. lệnh ls [option] [folder]
liệt kê dữ liệu có trong thư mục hay thư mục hiện thời.
[option] : --laht :liệt kê tất cả các thông số liên quan đến tập tin được liệt kê.

2. lệnh cd [folder].
di chuyển thư mục hiện thời đến thư mục khác.
có thể sử dụng ../ để chuyển đến thư mục gốc của thư mục hiện thời. suy ra có thể dùng ../../../ để chuyển về thư mục gốc của thư mục hiện thời 3 lần. => 2 lần,4 lần,...
đường dẫn folder có 2 loại: tuyết đối và tương đối. nếu xác định đưowngf dẫn từ thư mục gốc thì ký hiệu / ở đầu đường dẫn, nếu không có dấu / ở đầu đường dẫn thì xác định là thư mục hiện thời.

3. lệnh pwd
trả về thư mục hiện thời mà bạn đang đứng.

4. lệnh touch [options] [file_name]
tạo mới 1 lập tin dạng clear text.

5. lệnh mkdir [options] [folder name]
[options] : -p : không thông báo lỗi nếu thư mục đã tồn tại.
777,755,644,... cài đặt chmod cho thư mục được tạo ra.

6. lệnh chmod [options] [x1.x2.x3] [folder or file]

chmod chính là thao tác thay đổi các quyền sau:
    read - viết tắt là r - giá trị 4
    write - viết tắt là w - giá trị 2
    execute - viết tắt là x - giá trị 1

x1: quyền của owner - chủ sở hữu
x2: quyền của group - thành viên
x3: quyền của người còn lại public/orther,...
ví dụ: chmod = 755
owner: 7 = 4 + 2+ 1 => read + write + execute
group: 5 = 4 + 1 => read + execute
orther: 5 = 4 + 1 => read + execute

7. lệnh rm [options] [file or folder]
xóa dữ liệu file or folder trong linux
[options] : -f là không báo lỗi ngay cả khi dữ liệu không tồn tại
-rf là xóa toàn bộ dữ liệu chứa trong đó
-vrf là xóa toàn bộ dữ liệu chứa trong đó và sau khi xóa xong sẽ thông báo dữ liệu nào đã được xóa.
ngoài ra còn có lệnh rmdir để xóa thư mục

8. lệnh cp [options] [link1] [link2]
sao chép dữ liệu từ file or folder ở link1 đến file or folder ở link2
[options]: -prf là sao chép đè nếu đã tồn tại.nếu chưa tồn tại thì tạo mới thư mục và chép vào.
-vrf là sao chép và thông báo những dx liệu đã đưuọc sao chép.

9. lệnh mv [options] [link1] [link2]

di chuyển và đổi tên thư mục, tập tin
[options]: -prf là chép đè nếu đã tồn tại.nếu chưa tồn tại thì tạo mới thư mục và chép vào.
-vrf là chép và thông báo những dx liệu đã đươc chép.

10. lệnh echo [value] : in giá trị value ra màn hình
echo [value] > [file] : in giá trị value vào trong file
echo [value] >> [file] : in giá trị value vào trong file và ghi vào cuối file

12. lệnh cat [options] [file] : in dữ liệu trong file ra màn hình

cat [options] [file] > [file2] : in dữ liệu trong file vào trong file2
cat [options] [file] >> [file2] : in dữ liệu trong file vào trong file2 và ghi vào cuối file2

13. lệnh useradd [options] <username>
tạo mới 1 user

14. lệnh usermod [options] <username>
sửa đổi thông tin user

15. lệnh userdel [options] <username>
xóa user

16. lệnh ifconfig -a xem thông tin địa chỉ ip và các network interface đang dùng

Sunday, March 13, 2016

HÀM VÀ GỌI LẠI HÀM TRONG PHP

Để giảm thời gian lặp lại 1 thao tác code nhiều lần, PHP hỗ trợ người lập trình việc tự định nghĩa cho mình những hàm có khả năng lặp lại nhiều lần trong website. Việc này cũng giúp cho người lập trình kiểm soát mã nguồn một cách mạch lạc. Đồng thời có thể tùy biến ở mọi trang. Mà không cần phải khởi tạo hay viết lại mã lệnh như HTML thuần.

1- Hàm tự định nghĩa:


Cú pháp:
function functiono_name()
{
//Lệnh thực thi
}
Tên hàm có thể là một tổ hợp bất kỳ những chứ cái, con số và dấu gạch dưới, nhưng phải bắt đầu từ chứ cái và dấu gạch dưới.
Ví dụ:
<?php
 function name()
 {
  $name= array("Kenny", "Jiro", "Calvin", "Gillian");
  foreach ($name as $test)
  { echo "$test
"; } } name(); ?>

2- Hàm tự định nghĩa với các tham số:

Cú pháp:
function function_name($gt1,$gt2)
{
//Hành động
}
Ví dụ:
<?php
function indulieu($text)
{
echo "$text
"; } indulieu("welcome"); indulieu("who are you ?"); ?>

3- Hàm tự định nghĩa với giá trị trả về:

Cú pháp:
function function_name(Có hoặc không có đối số)
{
//Thuc thi
return giatri;
}
Ví dụ:
<?php
function tinhtong($a,$b)
{
$total=$a+$b;
return $total;
}
echo tinhtong(19,31)
?>

4-Gọi lại hàm trong PHP:

PHP cung cấp nhiều hàm cho phép triệu gọi lại file. Như hàm include("URL đến file"), require("URL Đến file").
Ngoài hai cú pháp trên còn có include_once(), require_once(). Hai hàm này cũng có trách nhiệm gọi lại hàm. Những chúng sẽ chỉ gọi lại duy nhất 1 lần mà thôi.
Ví dụ:
Tạo file top.html với nội dung:
<html>
 <head>
  <title>Welcome to you</title>
 </head>
 <body>
  <table border=1 width=700>
   <tr>
    <td colspan="5" align="center">Banner</td>
   </tr>
   <tr>
    <td align="center"> Home </td>
    <td align="center"> News </td>
    <td align="center"> Music </td>
    <td align="center"> Download</td>
    <td align="center"> Contact</td>
   </tr>
Tạo file body.html với nội dung:
    <tr><td colspan="5" align="center">Noi dung website</td>
    </tr>
Tạo file bottom.html với nội dung:
   <tr>
    <td colspan="5" align="center"> Copyright@ abc.com</td>
   </tr>
  </table>
 </body>
</html>
Tạo trang index.php với nội dung:
<?php
 include("top.html");
 include("body.html");
 include("bottom.html");
?>

Tổng kết:

Kết thúc bài học này, hẳn các bạn đã có những khái niệm cơ bản về hàm và cách sử dụng lại mã PHP. Trên ứng dụng thực tế việc dùng các hàm để triệu gọi đóng vai trò khá quan trọng, nó giúp mã nguồn của người sử dụng logic và dễ dàng chỉnh sửa hơn, việc ứng dụng nó trên website như thế nào cũng sẽ tùy biến hơn so với cách viết trực tiếp trên từng file.

Friday, March 11, 2016

CƠ BẢN VỀ COOKIE VÀ SESSION TRONG PHP

Cookie và session là hai phương pháp sử dụng để quản lý các phiên làm việc giữa người sử dụng và hệ thống. Việc quản lý phiên làm việc này sẽ giúp bạn tạo ra sự chứng thực hiệu quả bởi việc xác nhận thông tin trước khi truy cập vào một phân vùng cố định. Ngoài ra, việc quản lý tốt phiên làm việc cũng giúp người truy cập cảm thấy dễ dàng sử dụng dịch vụ của trang web cho những lần truy cập sau. Bởi cớ chế quản lý phiên làm việc ghi nhận lại quá trình truy cập của người sử dụng khi họ thăm viếc trang web của bạn lần đầu.

1. Tổng quan về cookie:

Cookie là 1 đoạn dữ liệu được ghi vào đĩa cứng hoặc bộ nhớ của máy người sử dụng. Nó được trình duyệt gởi ngược lên lại server mỗi khi browser tải 1 trang web từ server.
Những thông tin được lưu trữ trong cookie hoàn toàn phụ thuộc vào website trên server. Mỗi website có thể lưu trữ những thông tin khác nhau trong cookie, ví dụ thời điểm lần cuối ta ghé thăm website, đánh dấu ta đã login hay chưa, v.v...
Cookie được tạo ra bởi website và gởi tới browser, do vậy 2 website khác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới browser. Ngoài ra, mỗi browser quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 browser cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau.



a -Thiết lập cookie:


Để thiết lập cookie ta sử dụng cú pháp:
<?php Setcookie("tên cookie","giá trị", "thời gian sống"); ?>
Tên cookie là tên mà chúng ta đặt cho phiên làm việc.
Giá trị là thông số của tên cookie.
Ví dụ:
Setcookie("username","admin", time() +3600)
Như ví dụ trên ta thấy với tên là username và giá trị là admin, có thời gian sống là 1 giờ tính từ thời điểm thiết lập.
Chú ý: Kịch bản cookie phải đặt trên mọi giá trị trả về bao gồm thẻ HTML và lệnh echo.
Kịch bản cookie phải đặt trên mọi giá trị trả về bao gồm thẻ HTML và lệnh echo.

b - Sử dụng cookie:

Để sử dụng lại cookie vừa thiết lập, chúng ta sử dụng cú pháp:
Cú pháp: $_COOKIE["tên cookies"]
Tên cookie là tên mà chúng ta thiết lập phía trên.
Ví dụ:

Tạo trang cookie.php với nội dung sau:

<?php
setcookie("name","Kenny Huy",time() + 3600);
?>


Test page 1

Click here


Tiếp tục tạo trang cookie2.php với nội dung sau:

Result Page

<?php
echo "Ten cua ban la ".$_COOKIE['name']."";
?>


c- Hủy Cookie:

Để hủy 1 cookie đã được tạo ta có thể dùng 1 trong 2 cách sau:
+ Cú pháp: setcookie("Tên cookie")
Gọi hàm setcookie với chỉ duy nhất tên cookie mà thôi
+ Dùng thời gian hết hạn cookie là thời điểm trong quá khứ.
Ví dụ: setcookie("name","Kenny Huy",time()-3600);
Ví dụ:
Tiếp tục tạo trang cookie3.php với nội dung sau:
<?php
setcookie("name","Kenny Huy",time()-360);
?>


Test page 1

Click here


2- Tổng quan về session:

Một cách khác quản lý người sử dụng là session. Session được hiểu là khoảng thời gian người sử dụng giao tiếp với 1 ứng dụng. Một session được bắt đầu khi người sử dụng truy cập vào ứng dụng lần đầu tiên, và kết thúc khi người sử dụng thoát khỏi ứng dụng. Mỗi session sẽ có được cấp một định danh (ID) khác nhau và nội dung được lưu trong thư mục thiết lập trong file php.ini (tham số session.save_path).

a- Thiết lập session:

Để thiết lập 1 session ta sử dụng cú pháp: session_start()
Đoạn code này phải được nằm trên các kịch bản HTML. Hoặc những lệnh echo, printf.
Để thiết lập 1 giá trị session, ngoài việc cho phép bắt đầu thực thi session. Chúng ta còn phải đăng ký 1 giá trị session. Để tiện cho việc gán giá trị cho session đó.
Ta có cú pháp sau: session_register("Name")
Ví dụ:
<?php
Session_start();
Session_register("username");
?>

b- Sử dụng giá trị của session:

Giống với cookie. Để sử dụng giá trị của session ta sử dụng mã lệnh sau:
Cú pháp: $_SESSION["name"]
$_SESSION["name"]
Với Name là tên mà chúng ta sử dụng hàm session_register("name") để khai báo.
Ví dụ:
Tạo trang session.php với nội dung sau:
<?php
session_start();
session_register("name");
$_SESSION["name"] = "Kenny Huy";
?>


Test page 1

Click here



Tạo trang session2.php với nội dung sau:
<?
session_start();
?>

Result Page

<?php
echo "Ten cua ban la ".$_SESSION["name"]."";
?>



c- Hủy bỏ session:

Để hủy bỏ giá trị của session ta có những cách sau:
session_destroy() // Cho phép hủy bỏ toàn bộ giá trị của session
session_unset()// Cho phép hủy bỏ session .
Ví dụ:
Tạo trang session3.php với nội dung sau:
<?php
session_start();
session_destroy();
?>


Test page 1

Click here


Tổng Kết:


Sau bài học này chúng ta đã nắm được cách điều khiển phiên làm việc giữa cookie và session. Sử dụng chúng trong từng trường hợp cụ thể. Từ đó có thể áp dụng để viết những ứng dụng nhỏ như kiểm soát người đăng nhập, làm giỏ hàng online,…..

Monday, January 11, 2016

xung đột? pipelined và kỹ thuật forwarding, non-forwarding

 Pipeline là một kỹ thuật mà trong đó các lệnh được thực thi theo kiểu chồng lắp lên nhau.
- Cách tiếp cận dùng kỹ thuật pipeline tiêu tốn ít thời gian hơn cho tất cả các công việc hoàn tất bởi vì các công việc được thực hiện song song, vì vậy số công việc hoàn thành trong một giờ sẽ nhiều hơn so với không pipeline.
- Chú ý, pipeline không làm giảm thời gian hoàn thành một công việc mà làm giảm thời gian hoàn thành tổng số công việc (như trong ví dụ trên, thời gian cho người A hoàn thành việc giặt khi áp dụng pipeline hay không pipeline đều là 2 giờ, nhưng tổng số giờ cho 4 người A, B, C và D hoàn thành dùng pipeline giảm rất nhiều so với không pipeline)

Khi thực thi, các lệnh MIPS được chia làm 5 công đoạn:
1. Nạp lệnh từ bộ nhớ (IF – instruction fetch)
2. Giải mã lệnh và đọc các thanh ghi cần thiết (MIPS cho phép đọc và giải mã đồng thời) (ID – instruction decode)
3. Thực thi các phép tính hoặc tính toán địa chỉ (EX – execute)
4. Truy xuất các toán hạng trong bộ nhớ (MEM – memory access)
5. Ghi kết quả cuối vào thanh ghi (WB – write back)
Vì vậy, MIPS pipeline trong chương này xem như có 5 công đoạn (còn gọi là pipeline 5 tầng)

Sự tăng tốc của pipeline
v Trong trường hợp lý tưởng: khi mà các công đoạn pipeline hoàn toàn bằng nhau thì
thời gian giữa hai lệnh liên tiếp được thực thi trong pipeline bằng:
thời gian giữa hai lệnh liên tiếp được thực thi trong pipeline bằng:
à Trong trường hợp lý tưởng, pipeline sẽ tăng tốc so với không pipeline với số lần đúng
bằng số tầng của pipeline.
bằng số tầng của pipeline.
v Trong thực tế: Các công đoạn thực tế không bằng nhau, việc áp dụng pipeline phải chọn
công đoạn dài nhất để làm một chu kỳ pipeline.
Speed-up ≈ Thời gian giữa hai lệnh liên tiếp không pipeline / Thời gian giữa hai lệnh liên tiếp pipeline
công đoạn dài nhất để làm một chu kỳ pipeline.
Speed-up ≈ Thời gian giữa hai lệnh liên tiếp không pipeline / Thời gian giữa hai lệnh liên tiếp pipeline
à Trong thực tế, pipeline sẽ tăng tốc so với không pipeline với số lần nhỏ hơn số tầng
của pipeline.

của pipeline.


Thời gian giữa hai lệnh liên tiếp không pipeline / Thời gian giữa hai lệnh liên tiếp pipeline



Lưu ý, pipeline tăng tốc so với không pipeline:

  •  Kỹ thuật pipeline không giúp giảm thời gian thực thi của từng lệnhriêng lẽ mà giúp giảm tổng thời gian thực thi của đoạn lệnh/chươngtrình chứa nhiều lệnh (từ đó giúp thời gian trung bình của mỗi lệnhgiảm)riêng lẽ mà giúp giảm tổng thời gian thực thi của đoạn lệnh/chươngtrình chứa nhiều lệnh (từ đó giúp thời gian trung bình của mỗi lệnhgiảm)
  • Việc giúp giảm thời gian thực thi cho nhiều lệnh vô cùng quantrọng, vì các chương trình chạy trong thực tế thông thường lên đếnhàng tỉ lệnh.trọng, vì các chương trình chạy trong thực tế thông thường lên đếnhàng tỉ lệnh.


Các xung đột có thể xảy ra khi áp dụng kỹ thuật pipeline (Pipeline Hazards):
 Xung đột là trạng thái mà lệnh tiếp theo không thể thực thi trong chu kỳ pipeline ngay sau đó (hoặc thực thi nhưng sẽ cho ra kết quả sai), thường do một trong ba nguyên nhân sau:
Xung đột cấu trúc (Structural hazard): là khi một lệnh dự kiến không thể thực thi trong đúng chu kỳ pipeline của nó do phần cứng cần không thể hỗ trợ.
Nói cách khác, xung đột cấu trúc xảy ra khi có hai lệnh cùng truy xuất vào một tài nguyên phần cứng nào đó cùng một lúc.Xung đột dữ liệu (Data hazard): là khi một lệnh dự kiến không thể thực thi trong đúng chu kỳ pipeline của nó do dữ liệu mà lệnh này cần vẫn chưa sẵn sàng.
Xung đột điều khiển (Control/Branch hazard): là khi một lệnh dự kiến không thể thực thi trong đúng chu kỳ pipeline của nó do lệnh nạp vào không phải là lệnh được cần. Xung đột này xảy ra trong trường hợp luồng thực thi chứa các lệnh nhảy

Cách giải quyết xung đột dữ liệu:
-         Cách 1: Chờ chu kỳ xung clock.
-         Cách 2: Kỹ thuật nhìn trước (forwarding hay bypassing)
+ Kỹ thuật nhìn trước: một phương pháp giải quyết xung đột dữ liệu bằng đưa thêm vào các bộ đệm phụ bên trong, các dữ liệu cần có thể được truy xuất từ bộ đệm này hơn là chờ đợi đến khi nó sẵn sàng trong bộ nhớ hay trong thanh ghi.
+ Lưu ý, với lệnh lw và các lệnh có chức năng tương tự, thông thường kết quả cuối của nó không phải khi hoàn tất công đoạn EX mà là khi hoàn tất công đoạn MEM. (chờ 4 chu kỳ)
Kỹ thuật forwarding có thể hỗ trợ giải quyết xung đột dữ liệu hiệu quả, tuy nhiên nó không thể ngăn chặn tất cả các trường hợp chu kỳ rỗi.
+ Tóm lại, với kỹ thuật forwarding có:

ALU-ALU forwarding hay EX-EX forwarding (hình 1)MEM-ALU forwarding hay MEM-EX forwarding (hình 2)


hình 1

hình 2


Đối với phần Pipelined trong KTMT, việc xảy ra xung dột là điều hoàn toàn có thể, nhưng cũng có giải quyết, có 2 chú ý với kỹ thuật cho phép gửi vượt trước : Forwarding và ko cho gửi Non - forwarding như sau
- Non - forwarding: khi có 2 lệnh ở các chu kỳ kế tiếp nhau sử dụng chung thanh ghi (1 lệnh đọc và 1 lệnh ghi) thì: Chỉ khi lệnh trước nó tới công đoạn WB (nửa đầu WB đã dc ghi) thì lệnh tiếp theo dc phép thực thi ở công đoạn ID (giải mã lệnh ở nửa sau ID)
=> Kết luận: chỉ cần chú ý đặt NOP sao cho WB của lệnh trước thẳng hàng với ID của lệnh kế tiếp (tham khảo thêm hình)
- Forwarding: với các lệnh thuộc kiểu R-Format (add, sub...) thì EX của lệnh trước cần thẳng hàng với ID của lệnh sau (đảm bảo EX sau khi cho KQ được truyền thẳng tới ALU lệnh sau nó),
lệnh LW thì MEM của lệnh trước thẳng hàng với ID của lệnh sau (đảm bảo sau khi đọc/ ghi DL ở công đoạn MEM xong mới dc truyền xuống ALU của lệnh kế tiếp)
Chia sẻ trên bỏ qua các lệnh ss nhảy như beq (vì vướng điều kiện tiên đoán) ^^
Bạn nào có kinh nghiệm làm bài ở dạng này có thể cmt chia sẻ với mọi người nhé ^^
p/s: lệnh SW ít xảy ra do theo trình tự code: lw để load DL từ ô nhớ ra thanh ghi, thực thi bằng lệnh add, sub... và cuối cùng lưu lại giá trị của thanh ghi này xuống bộ nhớ => sw đã là lệnh cuối và ko lệnh nào thực thi sau nó nữa ^^ (Đặng Thị Kim Luyến)


Saturday, January 9, 2016

cách XĐ tín hiệu điều khiển từ khối "Control" - Datapath (KTMT)


** Tổng quan các lệnh cần xem xét:
(8 lệnh trong 3 nhóm chính của tập lệnh MIPS)

 § Nhóm lệnh tham khảo bộ nhớ (lw và sw):
Nạp lệnh > Đọc một/hai thanh ghi > Sử dụng ALU > Truy xuất bộ nhớ để đọc/ghi dữ liệu
 § Nhóm lệnh liên quan đến logic và số học (add, sub, AND, OR, và slt):
Nạp lệnh > Đọc một/hai thanh ghi > Sử dụng ALU > Ghi dữ liệu vào thanh ghi
 § Nhóm lệnh nhảy (Lệnh nhảy với điều kiện bằng beq):

Nạp lệnh > Đọc một/hai thanh ghi > Sử dụng ALU > Chuyển đến địa chỉ lệnh tiếp theo dựa trên kết quả so sánh

Giá trị các tính hiệu điều khiển từ khối “Control” sẽ như thế nào?
Khối control có các đường tín hiệu điều khiển: regdst,branch, memread, memwrite,memtoreg,ALUop, ALU src, regwrite
xét lệnh lw rt=rs+sign extend
+vì không có rd nên regdst =0
+lw sẽ load dữ liệu từ bộ nhớ và ghi dữ liệu đó và thanh ghi nên memread=1 và memwrite =1.
+ dữ liệu phải được ghi lại vào thanh ghi nên regwrite =1 và dữ liệu lấy từ D-mem nên memtoreg=1.
+ lw không phải là lệnh rẽ nhánh hay lệnh nhảy gì hết nên branch đương nhiên là =0
+ ALUsrc =1 vì dữ liệu thứ 2 được đưa vào ALU là sign-extend, dễ thấy, đường dữ liệu thứ nhất đưa vào ALU là thanh ghi đó, read data 1 đó
+ ALUop = add


nhìn hình minh họa cho đường dữ liệu ta cũng dễ thấy giá trị của các khối control đi ra, các giá trị điệu khiển hầu hết được đưa đến bộ MUX để cho phép đường này đi qua hay đường kia đi qua, tại hình ảnh có ghi rõ giá trị đầu nào của mux là 1, đầu nào là 0 nên cũng dễ dàng xá định được giá trị của control khi ta biết được đường đi datapath của lệnh. 

sau đây là hình ảnh của lệnh add rd=rs+rt
lệnh add sử dụng để rs,,rt,rd và không có signextend, nó chỉ cộng và ghi lên thanh ghi, không ddoogj chạm gì đến D-mem( truy xuất bộ nhớ) như lệnh lw cả và cũng không rẽ nhánh luôn, nên giá trị điều khiển của memread, memwrite, branch, ALUsrc đều =0
Tương tự đối lênh sw, sw không ghi lên thanh ghi mà nó chỉ lưu vào bộ nhớ thôi nhé, nên regwrite=0, còn lại tương tự như lw, quan sát hình mô tả đường đi datapath và so sánh với lệnh lw nhé.
và loại lệnh cần nhắc đến là lệnh bed rs,rt,branch address (rẻ nhánh có đk)
*chi tiết các loại lệnh, sử dụng rs,rt,rd hay signextend gì đó thì trong bảng MIPS có nêu rõ, nên khong cần bận tâm chổ này.
ở laoji lệnh này, ALU sẽ nạp dữ liệu từ 2 thanh ghi chứ không lấy từ sign extend, vì signextend lúc này là địa chỉ cần nhảy đến nếu điều đúng, ALU sẽ so sánh và đưa kết quả lên cổng AND với giá trị điều khiển 1 của control - branch, chỉ khi ALU trả về giá trị 1 thì mới đưa tín hiệu điều khiển =1 đến cho bộ mux của bộ Cộng lệnh nhảy và nhảy đến địa chỉ được nạp vào từ signextend. từ đó, khối D-mem tất nhiên không làm gì thì memread hay memwrite hay memtoreg, regwrite cũng vậy không liên liên quan đến lệnh này, do đó =0 tất., các giá trị còn lại, xác định qua hình rất dễ dàng

Friday, October 23, 2015

Going shopping in a traditional market or at a supermarket? Why?


Nowadays, supermarket is built and developed more and more, not only in the big city, but also in the province, the district. It changes shopping habits of people because of the following reasons.

The first reason is fast. All goods is arranged by the scientific rule on the shelves and the atmosphere is cool and fresh. You don’t spent more time to find the goods which you want to buy like in the traditional market. Even you don’t need to make line and wait or crowd to buy something you want. You just go and get and pay money.

The second reason is security. Because there are many security and surveillance cameras in the supermarket to protect customer from anything, any situation happen. So you can take your children go shopping with you. This is difficult for you if you go shopping in the traditional market.

The third reason is that you don’t negotiate for the price. At the supermarket, the price of the product is listed clearly under the product on the shelves. You have the option to select with its price.

The last reason is safe goods. Any good in the supermarket is listed the origin of goods, where production. They are checked by staff of supermarket to protect their customer. With fresh items such as fresh vegetable, meat or frozen items, they will be stored at temperature requirement. So they will be fresher and safer. If they were overdue, they would be cancel and not to be sold to customers.
These are some benefits of the supermarket. I hope you have a wise choice for your family.


Trần Khánh Toàn

Thursday, October 22, 2015

thông tin và đăng ký tham gia hackathon 2015

Hackathon - Job Search Innovation” là cuộc thi được tổ chức bởi TechLooper và Vietnamworks nhằm tìm kiếm những ý tưởng độc đáo về một trong những công nghệ: Internet of things, Big Data, Search and Matching với mong muốn giúp người tìm việc có nhiều cơ hội tìm được công việc mơ ước. Đặc biệt, giải thưởng hấp dẫn lên tới $10,000.

xem thêm chi tiết

Wednesday, October 7, 2015

xử lý FORM trong PHP

ví dụ 1 đoạn code form trong html như sau:
user name: pass word:
hiển thị form như sau:
user name:
pass word:

PHP cho phép ta lấy dữ dữ liệu từ form qua cú pháp:

$_GET['giá trị'] và $_POST['giá trị'], tùy theo phương thức gởi dữ liệu của form là get hay post.
phương thức GET
dùng để lấy dữ liệu từ form nhập liệu tuy nhiên nhiệm vụ chính của nó vẫn là lấy nội dung trang dữ liệu từ web server
phương thức POST
lấy dữ liệu từ form và chủ yếu là chuyển chúng lên web server

ví dụ với form nhập liệu ở trên, trong trang check.php có nhiệm vụ xử lý giá trị form gởi tới và in ra màn hình username và pass đã nhập, thì trang check.php sẽ được code như sau:
<? php
$name=$_POST['username'];
$pass=$_POST['password'];
echo "user name : ".$name."pass word : ".$pass;
?>

mảng trong PHP - khai báo và các hàm hổ trợ sẵn trên mảng PHP

1. định nghĩa mảng trong PHP

cú pháp: $tên_biến = array ("giá trị 1", "giá trị 2", "giá trị n",...);
mảng trong PHP nó tính từ 0 -> n-1.
ví dụ: $a=array(1,2,3,4,5);
thì khi muốn in ra giá trị 3 thì dùng lệnh echo $a[2];
ngoài cách khai báo mảng ở trên, PHP còn hổ trợ cách khai báo mảng sau:
$a[]=1;
$a[]=2;
$a[]=3;
.......

Tuesday, October 6, 2015

tại sao nên sử dụng XHTML thay cho HTML?

- vì XHTML là sự kết hợp giữa HTML và XML do đó tài liệu XHTML chính là tài liệu HTML nhưng được bổ sung thêm sự chắc chẽ trong cú pháp của XML, đảm bảo cấu trúc của trang web luôn thỏa điều kiện well-formed
- trình duyệt hiển thị XHTML nhanh hơn HTML vì không mất thời gian kiểm tra và sữa lỗi well-formed.

tạo FORM trong HTML

- form dùng để nhận thông tin từ người sử dụng hay phản hồi thông tin về người dùng
- người dùng có thể có các yêu cầu sau:
+ nhập vào câu trả lời, ý kiến
+ chọn câu trả lời từ danh sách
+ câu trả lời từ 1 hay 1 số tùy chọn

- dữ liệu có thể xử lý tại client hoặc xử lý tại server sau đó kết quả trả về cho người dùng
- sử dụng tag <form> để tạo form

thiết kế bảng HTML - dùng bảng để định dạng layout trang web

cấu trúc của 1 bảng:

column 1 column 2
row 1,col 1 row 2,col 2
row 2, col 1 row 2, col 2

kết quả sẽ như hình dưới

các thẻ HTML cơ bản

HTML gồm có 3 phần cở bản: tag, element, property


1. Tag

thẻ mở <tên thẻ> , thẻ đóng </ten thẻ>
- thẻ định dạng trang: <body>
- thẻ định dạng văn bản: <font>, <p>, <i>, <u>,...
- thẻ liên kết link: <a>
- thẻ định dạng danh sách: <ul>, <li>, <ol>
- thẻ định dạng hình ảnh: <img>

Monday, October 5, 2015

lập trình trên file trong PHP

Một trong những tác vụ đặc biệt của PHP đó là cho phép xử lý dữ liệu trực tiếp thông qua quá trình nhận và đọc nội dung trên 1 file dữ liệu. Điều này giúp cho PHP trở nên tinh tế và dễ tùy biến hơn khi xử lý 1 lượng dữ liệu có quy mô lớn. Việc thao tác mở, đọc, ghi, đóng file này cũng có ý nghĩa tuần tự như bạn đang làm việc trực tiếp trên 1 file dữ liệu thực thụ.


đóng mở 1 file trong PHP

Để mở 1 file ta sử dụng cú pháp sau: fopen("Đường dẫn", thuộc tính).
Trong đó Đường dẫn chính là đường dẫn tới file cần mở.
Thuộc tính bao gồm các quyền hạn cho phép thao tác trên file đó như thế nào.
Các thuộc tính cơ bản :
Ví dụ:

<?php
$fp=fopen("test.txt",r)or exit("khong tim thay file can mo");
?>
Tương tự như thế, để đóng 1 file ta có cú pháp như sau: fclose(file vừa mở)

Ví dụ:

<?php
$fp=fopen("test.txt",r)or exit("khong tim thay file can mo");
fclose($fp);
?>


Việc mở và đóng này không có ý nghĩa là chúng đã được đọc. Muốn đọc được nội dung của file chúng ta lại tiếp tục với thao tác lấy dữ liệu từ file nữa.

đọc 1 file trong PHP

PHP cho ta nhiều sự lựa chọn trong việc đọc 1 file. Có nhiều hình thức hỗ trợ nhưng hiện nay 2 hình thức phổ biến nhất vẫn là đọc file theo từng dòng và đọc file theo từng ký tự.

- Đọc file theo từng dòng:

Cú pháp : fgets(file vừa mở).
Ví dụ:

<?php
$fp=fopen("test.txt",r)or exit("khong tim thay file can mo");
echo fgets($fp);
fclose($fp);
?>

- Đọc file theo từng ký tự:

Cú pháp : fgetc(file vừa mở).

Ví dụ:

<?php
$fp=fopen("test.txt",r)or exit("khong tim thay file can mo");
echo fgetc($fp);
fclose($fp);

?>

Quy trình đọc sẽ diễn ra theo từng yêu cầu của cú pháp sử dụng. Nhưng sẽ có sự ràng buộc bởi việc kiểm tra đã đến cuối file chưa ?.

Ở đây chúng ta dùng cú pháp sau: feof(file vừa mở)
Ví dụ:

<?php
$fp=fopen("test.txt",r)or exit("khong tim thay file can mo");
while(!feof($fp))
{
echo fgets($fp);
}
fclose($fp);

?>

ghi file trong PHP

PHP cung cấp cho ta 1 cú pháp nhỏ để ghi dữ liệu vào 1file
Cú pháp cơ bản : fwrite("file vừa mở", "Nội dung cần ghi vào file")

Ví dụ:

 <?php
$fp=fopen("test.txt",a)or exit("khong tim thay file can mo");
$news="Trung Tam Tin hoc Viet Chuyenn";
fwrite($fp,$news);
fclose($fp);
?>

Tổng kết:


Việc sử dụng file một cách thành thạo sẽ giúp bạn dễ dàng vận hành các ứng dụng mang quy mô vừa và nhỏ như: website nhiều ngôn ngữ, bộ đếm,…và cả những công nghệ web mới như XML một cách dễ dàng. Qua bài học này chúng ta cũng hiểu được nguyên lý hoạt động, trình tự xử lý 1 file dữ liệu khi chúng được triệu gọi trong tài liệu PHP.